Что не так с моей логикой поиска совпадений в тексте?

sistemanipel

Client
Регистрация
28.08.2013
Сообщения
31
Благодарностей
1
Баллы
8
Сори, прошу помощи. Довольно таки давно пользуюсь PM для автоматизации рутины и ранее особо не углублялся в регулярки, использовал встроеный тестер регулярных выражений. Всегда считал что логика его работы это поиск текста между заданными значениями (+- разные там тюнинги типа "разрешить переносы" или "самое короткое совпадение"). Но столкнулся с трудностью и понимаю что в регулярки надо было таки вникать усерднее. Не могу понять, почему не парсится часть строки. Может ли кто ниибудь подсказать, что с моей логикой поиска совпадения в тексте не так?
Например текст: AG-CHECKBOX123ag-1455-inputAG-CHECKBOX124ag-1453-inputNot Verified
Регулярка: AG-CHECKBOX.*?Not\ Verified
Ожидал получить результат:
AG-CHECKBOX124ag-1453-inputNot Verified

Получаю результат: AG-CHECKBOX123ag-1455-inputAG-CHECKBOX124ag-1453-inputNot Verified
т.е. строка в результате без парсинга
я всегда считал что регулярное выражение это поиск совпадений и если их несколько то каждое совпадение отображается в новой строке. Что с моей логикой не так? Спасибо за помощь. Снесу любые пинки, не стесняйтесь пинать.
 

LaGir

Client
Регистрация
01.10.2015
Сообщения
245
Благодарностей
1 002
Баллы
93
Поиск по регулярному выражению идёт "слева направо", поэтому результат получается именно такой. В рамках синтаксиса регулярок, насколько помню, нет встроенного решения, но можно обходить проблему по-другому. Если на кубиках - например, разворачивать строку задом наперёд, искать по скорректированной регулярке под этот случай, полученный результат разворачивать обратно.
Если использовать C#-сниппет, то можно просто в опциях указать, чтобы искало справа налево.
C#:
string input = "AG-CHECKBOX123ag-1455-inputAG-CHECKBOX124ag-1453-inputNot Verified";
string pattern = @"AG-CHECKBOX.*?Not\ Verified";

return Regex.Match(input, pattern, RegexOptions.RightToLeft).Value;
 
  • Спасибо
Реакции: sistemanipel
Регистрация
17.01.2022
Сообщения
109
Благодарностей
30
Баллы
28
Сори, прошу помощи. Довольно таки давно пользуюсь PM для автоматизации рутины и ранее особо не углублялся в регулярки, использовал встроеный тестер регулярных выражений. Всегда считал что логика его работы это поиск текста между заданными значениями (+- разные там тюнинги типа "разрешить переносы" или "самое короткое совпадение"). Но столкнулся с трудностью и понимаю что в регулярки надо было таки вникать усерднее. Не могу понять, почему не парсится часть строки. Может ли кто ниибудь подсказать, что с моей логикой поиска совпадения в тексте не так?
Например текст: AG-CHECKBOX123ag-1455-inputAG-CHECKBOX124ag-1453-inputNot Verified
Регулярка: AG-CHECKBOX.*?Not\ Verified
Ожидал получить результат:
AG-CHECKBOX124ag-1453-inputNot Verified

Получаю результат: AG-CHECKBOX123ag-1455-inputAG-CHECKBOX124ag-1453-inputNot Verified
т.е. строка в результате без парсинга
я всегда считал что регулярное выражение это поиск совпадений и если их несколько то каждое совпадение отображается в новой строке. Что с моей логикой не так? Спасибо за помощь. Снесу любые пинки, не стесняйтесь пинать.
Вот, что вашей регуляркой вы берете. используйте сайт, чтобы написать нужную.
128867
 
  • Спасибо
Реакции: sistemanipel

sistemanipel

Client
Регистрация
28.08.2013
Сообщения
31
Благодарностей
1
Баллы
8
Поиск по регулярному выражению идёт "слева направо", поэтому результат получается именно такой. В рамках синтаксиса регулярок, насколько помню, нет встроенного решения, но можно обходить проблему по-другому. Если на кубиках - например, разворачивать строку задом наперёд, искать по скорректированной регулярке под этот случай, полученный результат разворачивать обратно.
Если использовать C#-сниппет, то можно просто в опциях указать, чтобы искало справа налево.
C#:
string input = "AG-CHECKBOX123ag-1455-inputAG-CHECKBOX124ag-1453-inputNot Verified";
string pattern = @"AG-CHECKBOX.*?Not\ Verified";

return Regex.Match(input, pattern, RegexOptions.RightToLeft).Value;
Спасибо за помощь. Я так и понял. Пока ждал ответа на форуме немного покопался в гугле и понял, что я возлагал на парсинг регуляркой слишком большие надежды. Твой код работает. Еще раз спасибо. Тему можно закрывать.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)