Regex - есть ли способ найти строку подстроки в любом порядке? - PullRequest
0 голосов
/ 04 апреля 2019

Так что в настоящее время у меня возникла проблема с поиском Regex для следующей ситуации:

Ситуация 1 (просто говорится, что затронута только одна страна): (...) @ MT (...)

Ситуация 2 (показывает несколько пострадавших стран): (...) @ MT, GR, DE, FR (...) Без какого-либо определенного порядка, поэтому он может быть похож на приведенный выше или (...) "@ GR, MT, FR, DE" (...) и т. Д.

То, чего я достиг в Ситуации 1, было бы довольно просто, но в остальном я немного невежественен ...

Это то, что я уже пробовал, двигаясь к тому, чего я хочу

Он получает Ситуацию 1 и «половину» Ситуации 2 (только второе вхождение)

^.*NOTES="#P\d\s\@(?<affected_MT>(MT|\,MT|(?>\,[A-Z]{2})*\,MT)).*$

Моя цель - найти экземпляр "MT" в строке, учитывая, что это может произойти в любом порядке

1 Ответ

1 голос
/ 04 апреля 2019

Вы можете использовать

NOTES="#P\d+\s+@(?:[A-Z]{2},)*MT\b

См. Демоверсию regex и график Regulex .

Это соответствует

  • NOTES=#P - подстрока NOTES=#P
  • \d+ - 1+ цифр
  • \s+ - 1+ пробелов
  • @ - @ char
  • (?:[A-Z]{2},)* - ноль или более последовательностей из 2 заглавных букв ASCII, за которыми следует запятая
  • MT\b - целое слово MT (\b - граница слова).

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...