Как написать отрицательное выражение для регулярного выражения в Python, в котором оба утверждения должны быть верными? - PullRequest
2 голосов
/ 28 июня 2019

Поэтому я пытаюсь сопоставить все вхождения определенной аббревиатуры XYZ, но только когда они не заключены в обе стороны в круглые скобки.Строки XYZ filler text, (XYZ filler text) и (Filler text XYZ) должны совпадать, а строка (XYZ) не должна совпадать.

Ближайшее, что я могу получить, это

(?<!\()XYZ(?!\))

ИзКонечно, проблема в том, что, если какое-либо отрицательное утверждение совпадает, все это больше не совпадает.Как я должен идти об этом?Спасибо!

1 Ответ

3 голосов
/ 28 июня 2019

Вы можете или (|) регулярное выражение:

(?<!\()XYZ|XYZ(?!\))

Пример

import re

lst = ['XYZ filler text', '(XYZ filler text)', '(Filler text XYZ)', '(XYZ)']

for x in lst:
    print(re.search(r'(?<!\()XYZ|XYZ(?!\))', x))

который выводит:

<re.Match object; span=(0, 3), match='XYZ'>
<re.Match object; span=(1, 4), match='XYZ'>      
<re.Match object; span=(13, 16), match='XYZ'>     
None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...