[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: Andrey_A, simup, ХарВик, chip642  
Форум » • Программы • Утилиты • » Утилиты » RegExp и вопросы по регулярным выражениям
RegExp и вопросы по регулярным выражениям
Andrey_AДата: Четверг, 28.11.2013, 22:49 | Сообщение № 1
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6500
Награды: 100
Репутация: 87
Аверин Андрей
RegExp




Дата выпуска: 2008
Версия: 1.02
Автор: AZJIO

RegExp - Утилита для теста регулярных выражений. Имеет несколько библиотек с готовыми регулярными выражениями, для решения некоторых задач парсинга. Утилита представляет собой только оболочку, синтаксический анализ (парсинг) выполняет встроенный в AutoIt3 движок PCRE. Ограничение добавления патернов в библиотеку 99. Для большего количества делаем очередной файл-библиотеку.



Скачать бесплатно Доступно только для пользователей

Дата выпуска: 29.07.2018
Версия: 2.8
Автор модификации: Averin Andrey

Скачать бесплатно модифицированную версию Доступно только для пользователей

Модифицированной версии больше не будет. Часть функционала RegExp перекочевали в отдельную команду regex утилиты TCIMG + кроме этого добавлено много разных фишек для дополнительного тестирования параметров и работы с шаблонами...



В этой теме возможны обсуждения вопросов, связанных с регулярными выражениями


Ссылки на различные ресурсы, документы

Доступно только для пользователей


В разных программах регулярные выражения могут отличаться...

.


 
Andrey_AДата: Понедельник, 12.06.2017, 10:08 | Сообщение № 16
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6500
Награды: 100
Репутация: 87
Аверин Андрей
Рекомендую при использовании подборке регулярных выражений обращать внимание на скорость выполнения




Я знал что есть медленные регулярные выражения, но не всегда акцентируешься на этом - главное работает и ладно...

Недавно в очередной раз убедился что на ВРЕМЯ выполнения выражения стоит обращать пристальное внимание, особенно при обработке большого текста
--------------
Вот пример:
1. Есть текст 20.000 строк
2. Есть 1.500 фраз
3. Цель создать 1.500 файлов со строками в которых есть заданные фразы...

Все достаточно просто - пробежаться в цикле 1500 раз и регуляркой повыдёргивать.

Сделал :
Код
[^\r\n]*фраза[^\r\n]*

все отлично - работает - пошёл в магазин, пришёл а цикл все работает - в итоге все это сделалось за 40 минут

Встал вопрос почему так медленно... В итоге проб и ошибок, подобрал такое:
Код
(?m)^.*фраза.*$


Она туже самую задачу сделала за 5 минут - как говорится "Почувствуйте разницу"

.


 
Andrey_AДата: Среда, 14.06.2017, 22:19 | Сообщение № 17
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6500
Награды: 100
Репутация: 87
Аверин Андрей
Регулярные выражения могут зацикливать скрипт/программу


В большинстве случаев тестирование рег.выражения производится на небольшом тексте/фразе...
Все при этом замечательно работает, но при громоздких данных шаблоны могут приводить к краху программы...

Вот несколько примеров...
В русской справке Autoit есть:
Код
Найти (\r\n|\r|\n){2,} заменить на \1 - удаляет пустые строки


Я тоже подобным пользовался, есть ещё и такое:
Код
(\R)+ заменить на \1

НО недавно попался текст, в котором пустых строк подряд было более 5000 и я не мог понять почему срипт ни с того ни с сего "падает"
Оказалось регулярка...
Подобрал такую:
Код
(\R)(\R+) заменить на \1

----
Подобная ситуация с удалением лишних пробелов, такая конструкция работала на небольшом к-ве пробелов
Код
(\h)+ заменить на \1

Но как только их появилось несколько тысяч подряд, то все рушилось...
Такая работает на большом количестве
Код
(\h)(\h+) заменить на \1

------------------
Вот ещё - долго пользовался для получения секции INI файла
Код
StringRegExp($sText,'(?mi)^\Q['&$sSection&']\E'&'[\r\n]+((?:[^[\r\n].*(?:[\r\n]+|$))*)',1)

а потом выяснилось, что она зависает, если ключей в секции более 3000 ...
Сейчас подобрал такую...
Код
StringRegExp($sText&@CRLF,'(?si)(?:\r\n|\r|\n|^)\Q['&$sSection&']\E'&'[\r\n]+(.*?[\r\n]+)(?:\[|$)',1)


-----------
ИТОГО: Не ленитесь тестировать на большом объёме данных, обращая внимания на скорость выполнения

.


 
asmadeusДата: Понедельник, 12.02.2018, 20:21 | Сообщение № 18
Генерал-полковник

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1150
Награды: 27
Репутация: 29
Не могу сообразить простую вроде бы регулярку.
Задача - получать номер версии с первой строки текстового файла.
Примеры записей:
Код
Converber 2.3.1

Программа, позволяющая конвертировать 2078 различных единиц измерения в 53 категориях. Преобразовывать можно длину, силу потока, температуру, денежные единицы (ежедневно обновляются) и т.д. Для удобства пользователя присутствует быстрый доступ к выбранным категориям, возможность добавления в закладки наиболее используемых преобразований, встроенный калькулятор, редактор формул и многое другое.

Еще:
Код
VeraCrypt 1.21 Rev 2

Кроссплатформенное приложение для создания зашифрованных виртуальных дисков, аналогичное TrueCrypt, чьим полноправным наследником и является.

У меня получилось что то такое - учитывваются 4 группы цифр, из которых обязательны две. Учтено, что вместо цифр на третьей позиции может быть rev, build, final или beta... Но надо сделать выбор только с первой строки, так как если есть цифры в остальном тексте - идет не то что требуется:
Код
$test = stringRegExpReplace ($test, "([^\d]+)(\d+\.\d+(?:\sRev|\sBuild|\sBeta|\sFinal|\.\d+)?(?:\.\d+|\s\d+)?)*","\2")
 
Andrey_AДата: Понедельник, 12.02.2018, 21:00 | Сообщение № 19
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6500
Награды: 100
Репутация: 87
Аверин Андрей
asmadeus, для получения начало строки есть спец. символ \A

Получить 1-ю строку:

Код
\A([^\r\n]+)




Для получения групп цифр первой строки, один из примеров

Код
\A(?:[^\r\n\d]+)([\d\.]+)(?:[^\r\n\d]*)(\d*)




.


 
asmadeusДата: Понедельник, 12.02.2018, 21:21 | Сообщение № 20
Генерал-полковник

На сайте с: 14.12.2012
Город: Кривой Рог
Сообщений: 1150
Награды: 27
Репутация: 29
Andrey_A, а я думал, что примерно так:
Код
(?m)^Text$

Пытался - и ничего. Сейчас попробую твой вариант/
Жуть. В RegExp работает. Засовываю в скрипт - полная хрень. Ну и ладно, пойдем другим путем.
Добавлено:
Итого, как не странно, подошел такой вариант. Вроде работает на всех встречающихся мне вариантах текста:
Код
$test = StringRegExpReplace($test,'\A(?:[^\r\n\d]+)([^\r\n]+)(?s)(.+)','\1')

Осталось переделать для вставки в tcimg (в одном месте надо с replace, как выше, а в другом просто поиск и замена через утилиту. Никак же не указать, что возьми первую скобку и замени на что то.)
 
stokberДата: Среда, 20.02.2019, 18:54 | Сообщение № 21
Рядовой

На сайте с: 20.02.2019
Город: Харьков
Сообщений: 2
Награды: 0
Репутация: 0
По ссылке на RegExp 2.8 качается все тот же RegExp 1.02.
 
sibirnikДата: Четверг, 21.02.2019, 03:57 | Сообщение № 22
Генерал-майор

На сайте с: 27.08.2014
Сообщений: 344
Награды: 8
Репутация: 4
stokber,
Цитата stokber ()
По ссылке на RegExp 2.8 качается все тот же RegExp 1.02.

Ложь...По второй ссылке в шапке
Скачать бесплатно модифицированную версию RegExp качается версия 2.8
 
stokberДата: Четверг, 21.02.2019, 09:03 | Сообщение № 23
Рядовой

На сайте с: 20.02.2019
Город: Харьков
Сообщений: 2
Награды: 0
Репутация: 0
Даже не знаю, что это вчера было. С утра все верно скачалось. Спасибо!
 
Lord_NEVRДата: Пятница, 08.03.2019, 15:49 | Сообщение № 24
Подполковник

На сайте с: 24.06.2016
Город: Калининград
Сообщений: 122
Награды: 0
Репутация: 0
Добрый день.

Нужна помощь по регулярным выражениям.

Есть такие новости, RSS ленты.
Где одинаковые новости с разными датами публикации и разными версиями в названии.

Пример: Программы
Цитата
AOMEI Partition Assistant Technician 8.0 (Repack & Portable) (старая дата)
AOMEI Partition Assistant Technician 8.0 (Repack & Portable) (последняя дата)

Acoustica Premium 7.1.6 (Repack & Portable) (старая дата)
Acoustica Premium 7.1.8 (Repack & Portable) (последняя дата)

ActivePresenter Pro 6.1.6 / 7.5.4 x64 (Repack & Portable) (старая дата)
ActivePresenter Pro 6.1.6 / 7.5.5 x64 (Repack & Portable) (последняя дата)

Affinity Designer 1.6.5.135 x64 (Repack & Portable) (старая дата)
Affinity Designer 1.6.5.135 / 1.7.0.243 (Repack & Portable) (последняя дата)
и.т.д.


Пример:Книги
Цитата
Многоавторские сборники :: Книжная серия | Межавторский цикл «Warhammer 40000» [820 книги] (1989-2018) [FB2, RTF, PDF, CHM] (старая дата)
Многоавторские сборники :: Книжная серия | Межавторский цикл «Warhammer 40000» [832 книги] (1989-2018) [FB2, RTF, PDF, CHM] (последняя дата)

Владимир Абрамов - Сборник произведений (20 книг) [2016-2018, Боевая фантастика, Фэнтези, Попаданцы, LitRPG, FB2] (старая дата)
Владимир Абрамов - Сборник произведений (28 книг) [2016-2018, Боевая фантастика, Фэнтези, Попаданцы, LitRPG, FB2] (последняя дата)
и.т.д.


Нужно регулярное выражение для RSS ридера, удаляющее все старые даты публикации новостей. И старые версии прог. Оставляющее последние версии и даты публикации.


Сообщение отредактировал Lord_NEVR - Пятница, 08.03.2019, 15:50
 
Andrey_AДата: Суббота, 09.03.2019, 11:07 | Сообщение № 25
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6500
Награды: 100
Репутация: 87
Аверин Андрей
[img640]http://tc-image.3dn.ru/Image/tctcimg/0/regex87867.png[/img640]

 
Lord_NEVRДата: Суббота, 09.03.2019, 16:03 | Сообщение № 26
Подполковник

На сайте с: 24.06.2016
Город: Калининград
Сообщений: 122
Награды: 0
Репутация: 0
Andrey_A, Эм, прошу прощения там формат дат такой.
Моя вина не так написал.

Цитата
AOMEI Partition Assistant Technician 8.0 (Repack & Portable) 19.01.19 10:34
AOMEI Partition Assistant Technician 8.0 (Repack & Portable) 20.02.19 10:50

Acoustica Premium 7.1.6 (Repack & Portable) 05.01.19 10:34
Acoustica Premium 7.1.8 (Repack & Portable) 09.03.19 09:20

ActivePresenter Pro 6.1.6 / 7.5.4 x64 (Repack & Portable) 10.01.19 10:34
ActivePresenter Pro 6.1.6 / 7.5.5 x64 (Repack & Portable) 10.01.19 16:41

Affinity Designer 1.6.5.135 x64 (Repack & Portable) 14.01.19 10:34
Affinity Designer 1.6.5.135 / 1.7.0.243 (Repack & Portable) 19.02.19 15:36
 
Andrey_AДата: Суббота, 09.03.2019, 20:05 | Сообщение № 27
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6500
Награды: 100
Репутация: 87
Аверин Андрей
Lord_NEVR, если 2-я строка всегда новая, то самый простой вариант:
1. Удалить все пустые строки
2. В конце текста оставить одну пустую строку
и удалить зеброй
Код
([^\r\n]+[\r\n]+){1}([^\r\n]+[\r\n]+){1}


[img640]http://tc-image.3dn.ru/Image/tctcimg/0/regex87869.png[/img640]

.


 
Форум » • Программы • Утилиты • » Утилиты » RegExp и вопросы по регулярным выражениям
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Сообщите о находке всему миру:
Рейтинг@Mail.ru Тиц и pr сайта Яндекс.Метрика

Интеллектуальные права и отказ от ответственности


Перейти на сайт Недвижимость сточи