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

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
Сообщения
230
Благодарностей
944
Баллы
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
Сообщения
65
Благодарностей
19
Баллы
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
т.е. строка в результате без парсинга
я всегда считал что регулярное выражение это поиск совпадений и если их несколько то каждое совпадение отображается в новой строке. Что с моей логикой не так? Спасибо за помощь. Снесу любые пинки, не стесняйтесь пинать.
Вот, что вашей регуляркой вы берете. используйте сайт, чтобы написать нужную.
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;
Спасибо за помощь. Я так и понял. Пока ждал ответа на форуме немного покопался в гугле и понял, что я возлагал на парсинг регуляркой слишком большие надежды. Твой код работает. Еще раз спасибо. Тему можно закрывать.
 

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