регулярное выражение сопоставления содержимого между шаблонами с условием в среде тех же шаблонов Python - PullRequest
0 голосов
/ 06 февраля 2019

Нужно сопоставить шаблон: [[ : ]],

Я делаю: \[\[(?!\[\[).[:]+.*?\]\]

Но когда в шаблоне есть среда с множеством одинаковых шаблонов, таких как: [[:]] [[ [] ]] [[]] [[ : ]] [[ : ]] соответствие не удалось, иreturn: [[:]], [[:]]

Или, если регулярное выражение равно: \[\[.*?[:]+.*?\]\], что дает:

[[  []  ]] [[]] [[ :  ]] instead of [[ :  ]]

Пример

Каков истинный путь?

1 Ответ

0 голосов
/ 07 февраля 2019

Когда вам нужно сопоставить [[ : ]] -подобные строки, вы должны сначала сопоставить [[, затем любые 0+ символов, которые не являются : и не запускают последовательность начала / закрытия, то есть [[ и]], тогда вам нужно сопоставить символ :, а затем любые 0+ символов до первого (крайнего левого) вхождения ]].

Шаблон, который вы можете использовать:

\[\[(?:(?!\[\[|]])[^:])*:.*?]]

См. Демонстрационную версию regex .Не забудьте использовать re.DOTALL или re.S, чтобы . соответствовал нескольким строкам.

Подробности

  • \[\[ - [[ substring
  • (?:(?!\[\[|]])[^:])* - жадный жетон , соответствующий любому символу, кроме : (см. [^:] отрицательный класс символов), 0+ раз (см. *), который не запускает последовательности [[ и ]]
  • : - двоеточие
  • .*? - любые 0+ символов, как можно меньше
  • ]] - подстрока ]].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...