Regex для соответствия алфавиту + закрывающая скобка, которая не имеет подходящей открывающей скобки - PullRequest
2 голосов
/ 21 марта 2019

Я бы хотел соответствовать только

а), б) и в)

однако мой текущий оператор регулярных выражений также соответствует всему соответствующему алфавиту + ')'.

мой текущий оператор регулярного выражения:

(?<!\().*?(\w\))

предложение:

Это (пример а) а) это что-то. б) это нечто другое. в) это другое дело. Это (пример б) а) это что-то. б) это нечто другое. в) это другое дело.

Ожидаемый результат: ['a)', 'b)', 'c)']

Токовый выход: ['a)', 'a)', 'b)', 'c)']


Я тоже думал о

(?<!\(\w+).*?(\w\)) 

но это не будет работать для моего случая, так как я использую Python, а квантификатор '+' внутри lookbehind недопустим в Python. Так что любые идеи обойти это тоже приветствуются.

1 Ответ

0 голосов
/ 21 марта 2019

Вы можете использовать шаблон чередования, который соответствует либо паре совпадающих скобок, либо символу слова, за которым следует правая скобка, а затем отфильтровывать пустые совпадения:

list(filter(None, re.findall(r'.*?(?:\([^)]*\)|(\w\)))', s)))

, чтобы получить:

s = 'This is (example a) a) this is something. b) this is something else. c) this is another thing.'

вернется:

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