RegExp и вопросы по регулярным выражениям
|
Andrey_A | Дата: Четверг, 28.11.2013, 22:49 | Сообщение № 1 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6828
Награды: 129
Репутация: 114
Аверин Андрей
|
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
Город: Сочи, Хоста
Сообщений: 6828
Награды: 129
Репутация: 114
Аверин Андрей
|
Рекомендую при использовании подборке регулярных выражений обращать внимание на скорость выполнения
Я знал что есть медленные регулярные выражения, но не всегда акцентируешься на этом - главное работает и ладно...
Недавно в очередной раз убедился что на ВРЕМЯ выполнения выражения стоит обращать пристальное внимание, особенно при обработке большого текста -------------- Вот пример: 1. Есть текст 20.000 строк 2. Есть 1.500 фраз 3. Цель создать 1.500 файлов со строками в которых есть заданные фразы...
Все достаточно просто - пробежаться в цикле 1500 раз и регуляркой повыдёргивать.
Сделал :
все отлично - работает - пошёл в магазин, пришёл а цикл все работает - в итоге все это сделалось за 40 минут
Встал вопрос почему так медленно... В итоге проб и ошибок, подобрал такое:
Она туже самую задачу сделала за 5 минут - как говорится "Почувствуйте разницу"
.
|
|
| | |
Andrey_A | Дата: Среда, 14.06.2017, 22:19 | Сообщение № 17 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6828
Награды: 129
Репутация: 114
Аверин Андрей
|
Регулярные выражения могут зацикливать скрипт/программу
В большинстве случаев тестирование рег.выражения производится на небольшом тексте/фразе... Все при этом замечательно работает, но при громоздких данных шаблоны могут приводить к краху программы...
Вот несколько примеров... В русской справке Autoit есть:
Код Найти (\r\n|\r|\n){2,} заменить на \1 - удаляет пустые строки
Я тоже подобным пользовался, есть ещё и такое:
НО недавно попался текст, в котором пустых строк подряд было более 5000 и я не мог понять почему срипт ни с того ни с сего "падает" Оказалось регулярка... Подобрал такую:
Код (\R)(\R+) заменить на \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 |
|
Не могу сообразить простую вроде бы регулярку. Задача - получать номер версии с первой строки текстового файла. Примеры записей:
Код 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")
|
|
| | | | |
asmadeus | Дата: Понедельник, 12.02.2018, 21:21 | Сообщение № 20 |
|
Andrey_A, а я думал, что примерно так:
Пытался - и ничего. Сейчас попробую твой вариант/ Жуть. В 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
|
По ссылке на RegExp 2.8 качается все тот же RegExp 1.02.
|
|
| | |
sibirnik | Дата: Четверг, 21.02.2019, 03:57 | Сообщение № 22 |
|
stokber,
Цитата stokber (  ) По ссылке на RegExp 2.8 качается все тот же RegExp 1.02. Ложь...По второй ссылке в шапке Скачать бесплатно модифицированную версию RegExp качается версия 2.8
|
|
| | |
stokber | Дата: Четверг, 21.02.2019, 09:03 | Сообщение № 23 |
Рядовой
На сайте с: 20.02.2019
Город: Харьков
Сообщений: 2
|
Даже не знаю, что это вчера было. С утра все верно скачалось. Спасибо!
|
|
| | |
Lord_NEVR | Дата: Пятница, 08.03.2019, 15:49 | Сообщение № 24 |
Полковник
На сайте с: 24.06.2016
Город: Калининград
Сообщений: 166
|
Добрый день.
Нужна помощь по регулярным выражениям.
Есть такие новости, 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 |
|
| | | | |
Lord_NEVR | Дата: Суббота, 09.03.2019, 16:03 | Сообщение № 26 |
Полковник
На сайте с: 24.06.2016
Город: Калининград
Сообщений: 166
|
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
Город: Сочи, Хоста
Сообщений: 6828
Награды: 129
Репутация: 114
Аверин Андрей
|
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]
.
|
|
| | |
asmadeus | Дата: Воскресенье, 14.07.2019, 11:54 | Сообщение № 28 |
|
Привет всем! Я столкнулся с трудностями. Пинайте, но не больно. Регулярка такая:
Код StringRegExp($Ishod, '(?m)^(?:Авторы:\r\n.+\r\n(?:.+\r\n)?)(?:Обе стороны|Неизвестно|Реверс)\s+([^\r\n\t]+)', 3) (взята с кода скрипта) Исходный текст примерно такой (один с тех, который обрабатывается неверно):
Код Информация: WWC номер Y# A47 Страна Польша Номинал 20 грошей Год 1961 Период Народная Республика (1950 - 1990) Вид чекана Регулярный выпуск Материал Алюминий Гурт Гладкий Форма Круг Отношение авс/рев Медальное (0°) Вес (г) 1 Диаметр (мм) 20 Толщина (мм) 1.4 Легенда: Аверс POLSKA RZECZPOSPOLITA LUDOWA Реверс 20 GROSZY Стоимость, UAH: 3.48 грн. окт.2017 г.янв.2018 г.апр.2018 г.июль2018 г.окт.2018 г.янв.2019 г.апр.2019 г.июль2019 г.3,203,523,844,164,48 Month Стоимость 14 июл. 2019 г. 3,48 1 июл. 2019 г. 3,57 1 июн. 2019 г. 3,62 1 мая 2019 г. 3,55 1 апр. 2019 г. 3,67 1 мар. 2019 г. 3,68 1 февр. 2019 г. 3,82 1 янв. 2019 г. 3,81 1 дек. 2018 г. 3,83 1 нояб. 2018 г. 3,83 1 окт. 2018 г. 3,93 1 сент. 2018 г. 3,91 1 авг. 2018 г. 3,74 1 июл. 2018 г. 3,68 1 июн. 2018 г. 3,63 1 мая 2018 г. 3,8 1 апр. 2018 г. 3,91 1 мар. 2018 г. 3,93 1 февр. 2018 г. 4,16 1 янв. 2018 г. 4,05 1 дек. 2017 г. 3,86 1 нояб. 2017 г. 3,76 1 окт. 2017 г. 3,78 1 сент. 2017 г. 3,67 1 авг. 2017 г. 3,68 Авторы: Сторона Имя Аверс Andrej Peter Реверс J. Koreń Реверс A. Ham Тираж: Монетный двор Тираж Unc BU Proof Варшава, Польша 53.108.417 - - Задача - получить два значения, а не одно:
|
|
| | |
Andrey_A | Дата: Воскресенье, 14.07.2019, 14:02 | Сообщение № 29 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 6828
Награды: 129
Репутация: 114
Аверин Андрей
|
asmadeus, сделай из 2-х кусков 1-й получаешь нужный отрезок (от Автора до...) 2-й регуляркой получаешь все значения в нужном отрезке
Код (?:Обе стороны|Неизвестно|Реверс)\h+([^\r\n\t]+)
.
|
|
| | |
asmadeus | Дата: Воскресенье, 04.08.2019, 12:18 | Сообщение № 30 |
|
Привет. А кто может пояснить, почему в тестере и акеелпаде регулярка ведет себя по разному? Пример исходного текста:
Код Польша;1 злотый;2009;;Польский злотый;;;;Y# 282;;Монеты Польши Польша;2 злотых;1994;;Польский злотый;;;;Y# 283;;Монеты Польши В тестере регулярка:
Код $test=StringRegExpReplace($test,'(?m)^(.*)\;(\d+)\s+(.*)\;(\d{4})\;{2,3}(.*)\;{4}((?:KM|UC|Y)#\s\d+).*$','Импортированные монеты;\1;\2;\3;\4;;;;;\6') Согласен, слеплена криво, но в тестере работает (много нюансов может быть в исходнике) Результат (желаемый):
Код Импортированные монеты;Польша;1;злотый;2009;;;;;Y# 282 Импортированные монеты;Польша;2;злотых;1994;;;;;Y# 283
То есть построчная обработка с отсеиванием всего лишнего и подгонки под нужный вид Но в акеле при поиске и замене с регуляркой (той же самой) вообще не то!
Решил через кнопки и скрипты
|
|
| |
|