Регулярные выражения

Russian main discussion
  • Author
  • Message
Offline
Posts: 5
Joined: Wed Oct 31, 2018 8:05 am

Post by konstazhoglo »

YuS wrote:А ответы Вы читаете полностью?
Найдите 10 отличий:

Code: Select all

1. ^(.*?)$\s+?^(?=.*^\1$)
2. ^(.*?)$\s+?^(?=.*^\1$)
Первый шаблон напечатан Ср Окт 31, 2018 6:08 pm в ответе opk44, адресованном Вам. И он таки работает.
Второй - напечатали Вы Чт Ноя 01, 2018 6:34 pm, с указанием того, что он якобы не работает.
Где логика?

Как бы подсказка:

Code: Select all

(?-s)^(.*?)$\s+?^(?=.*^\1$)
ответы читаю полностью. А логика следующая в своем первом посте я ошибся в наборе неработающего шаблона, имелся в виду исправленый вариант, совпадающий с тем что был указан в сообщении opk44.

Но суть моего первого поста осталась прежней, что этот шаблон (исправленный) и предложенный opk44 не работает в akelpad. Прога виснет и вывести ее из этого состояния можно только тем, что принудительно завершить ее выполнение.
hence актуальным остается мой вопрос в конце предыдущего поста.

p.s. спасибо за предложенный вами шаблон с (?-s) в начале, он работает, но предыдущий без проблем работающий в notepad++ без (?-s) виснет наглухо в akelpad.

YuS
Offline
Posts: 513
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

opk44 wrote:YuS,
Поэтому наоборот, вместо (?-s) использовал бы (?s).
Все дело в том, что любой вариант включения захвата точкой всех символов, включая \n, у меня, например (также как и у konstazhoglo), приводит к зависанию AP, в отличии от обратной опции...

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

YuS
Ну, если уж быть точным, то зависания там не происходит.
Просто на естественных данных скорость расчета катастрофически падает с ростом числа строк и общего размера данных.
Попробовал на энциклопедическом словаре (строки до 75 символов).
100 строк - 3 сек
200 строк - 10 сек
300 строк - 35 сек
400 строк - 85 сек
500 строк - 162 сек
600 строк - 310 сек
Каждые дополнительные 100 строк дают удвоение времени работы (на моей машине).

Offline
Posts: 5
Joined: Wed Oct 31, 2018 8:05 am

Post by konstazhoglo »

opk44 wrote:YuS
Ну, если уж быть точным, то зависания там не происходит.
Просто на естественных данных скорость расчета катастрофически падает с ростом числа строк и общего размера данных.
Попробовал на энциклопедическом словаре (строки до 75 символов).
100 строк - 3 сек
200 строк - 10 сек
300 строк - 35 сек
400 строк - 85 сек
500 строк - 162 сек
600 строк - 310 сек
Каждые дополнительные 100 строк дают удвоение времени работы (на моей машине).
в моем файле было более 14000 строк т.е время выполнения "на вашем компе" 2^140 секунд, доживут не многие до конца обработки, скорее Земля налетит на небесную ось.:)
Вопрос почему такие грабли с этим шаблоном в akelpad а в notepad++ их нет? Ведь по идее реализации должна быть одна и та же обработки регэкспов.

YuS
Offline
Posts: 513
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

opk44 wrote:YuS
Ну, если уж быть точным, то зависания там не происходит.
Может быть и так. Но, это если педантично подходить к самим терминам... а в реальных условиях, если интерфейс программы недоступен при обработке документа с простым текстом в 1Мб, хотя бы в течении нескольких минут, это уже можно считать зависанием... имхо.
opk44 wrote: Просто на естественных данных скорость расчета катастрофически падает с ростом числа строк и общего размера данных.
Попробовал на энциклопедическом словаре (строки до 75 символов).
100 строк - 3 сек
200 строк - 10 сек
300 строк - 35 сек
400 строк - 85 сек
500 строк - 162 сек
600 строк - 310 сек
Каждые дополнительные 100 строк дают удвоение времени работы (на моей машине).
Так вот я и говорю, что тесты проводил в условиях приближенных к тем, которые оговорил задавший вопрос, а это:
количество строк примерно 14000
В общем, если время обработки стремится к бесконечности на документах сравнительно небольшого объема, то надо бы это дело как-то ограничить, наверное... ну, или какой-нибудь прогресс-бар привинтить, чтобы не возникало ощущения зависания интерфейса.

PS
А вообще, я бы немного оптимизировал регэксп:

Code: Select all

(?s)^([^\n\r]*)\s+?^(?=.*?^\1[\n\r])
- в таком виде, наверное, будут более приемлемые результаты:
несортированные строки в: test.txt (utf8) 476,2kb, 15000 строк
время обработки: около 90сек.
итого: осталось 183 строки

или даже так:

Code: Select all

(?s)^([^\n\r]*+)\s+?^(?=.*?^\1[\n\r])
что гораздо быстрее. При тех же условиях:
время обработки: около 25сек.

если же строки отсортированы, то вообще:
время обработки: около 5-10сек.

Offline
Posts: 54
Joined: Wed Oct 21, 2009 7:57 pm

Post by Deft »

Подскажите как лучше реализовать несколько последовательных замен текста с учетом регулярных выражений по одному клику. Подумывал вариант с макросом, но со временем придется менять количество и вид замен, то есть заново его переписывать. Может какой-то плагин или скрипт умеет? На старте у меня только два столбика: найти-заменить 20 пар.

YuS
Offline
Posts: 513
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

Deft wrote:Может какой-то плагин или скрипт умеет?
FindReplaceEx.js

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Регулярные выражения: двойной квантификатор плюс «++»

Post by Eskander88 »

встретил в файле .coder секции QuotesRE: плагина Coder::Plugin такое регулярное выражение:

Code: Select all

;==================================================================================================================================
;Flags  Pattern                                              "\BackRef=(FontStyle,ColorText,ColorBk) \BackRef=..."  ParentID RuleID
;==================================================================================================================================
;...
0	"@[_a-z\d\-]++"                                          "\0=(0,${TYPE},0)"                                 -3       0
;...
подскажите пожалуйста, что означает паттерн «@[_a-z\d\-]++» с двумя квантификаторами «++»?

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Re: Регулярные выражения: двойной квантификатор плюс «++»

Post by opk44 »

Eskander88 wrote:встретил в файле ... с двумя квантификаторами «++»?
Использование сверхжадных квантификаторов

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

ребят, помогите , составить функцию.

задача: разбить диапазоны чисел, как образец

"content": "1 - 7",

чтобы они были по порядку в отдельных строках, чтобы получилось так

"content": "1",
"content": "2",
"content": "3",
"content": "4",
"content": "5",
"content": "6",
"content": "7",

и можно ли будет потом эту функцию использовать в скрипте FindReplaceFiles.js ?

Спасибо

Offline
Posts: 351
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

InFive
Можно за малое число телодвижений сделать универсальными скриптами: есть 3 скрипта заполнения колонок. Для начала генеруешь много строк: "content": "",
, например выделяешь 100 строк столбиком и вставляешь текст, получим 100 строк указанного текста. Потом ставишь курсор в первую и последнюю строку столбиком и вызываешь один из скриптов заполнения числами.
Можно сгенерировать числа столбиком, а потом регулярным выражением окаймить их нужным текстом.

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

AZJIO
спасибо

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

ребят, помогите составить функцию

я поставил закладки на строки с помощью скрипта FindReplaceEx.js

числа в этих строках по разному
"code": ",4,5,",
"code": "8",
"code": ",4,5,6,7,8,9,",

можно ли увеличивать/уменьшать числа в строках с закладками?
чтобы обрабатывались любые числа в закладках

УЖЕ НЕ АКТУАЛЬНО - СДЕЛАЛ СВОЮ ЗАДАЧУ С ПОМОЩЬЮ КУЧИ РЕГУЛЯРОК И ПРОСТЕНЬКОЙ ФУНКЦИИ.

ИЗВИНИТЕ ЗА БЕСПОКОЙСТВО...
Last edited by InFive on Fri Jan 29, 2021 1:19 pm, edited 1 time in total.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

InFive wrote:я поставил закладки на строки с помощью скрипта FindReplaceEx.js
...
можно ли увеличивать/уменьшать числа в строках с закладками?
чтобы обрабатывались любые числа в закладках
Что у вас за версия FindReplaceEx.js? Та что есть у меня, с закладками (Lineboard-plugin) не работает. Или поясните, что вы считаете закладками.

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

opk44 wrote:Та что есть у меня, с закладками (Lineboard-plugin) не работает. Или поясните, что вы считаете закладками.
да, в этом скрипте это называется Пометить строки, но в скрипте TextReplace.js это называется Закладки, только в них можно делать замены, но только скрипт FindReplaceEx можно использовать для того, чтобы пометить строки нужные.

упс, оказывается и TextReplace.js может помечать строки, что-то я забыл об этом.

FindReplaceEx 2018-11-06

но вот не могу адаптировать функцию ($1)+(Number($2)+1) для скрипта TextReplace.js
Last edited by InFive on Fri Jan 29, 2021 1:20 pm, edited 1 time in total.
Post Reply