Прекратить сопоставление при встрече последовательности символов: исправление вида сзади

У меня есть следующее регулярное выражение:

(?P<question>.+(?<!\[\[))

Он предназначен для соответствия hello world! в строке hello world! [[A string typically used in programming examples]]

Все же я просто сопоставляю всю строку, и я не могу понять, почему. Я попробовал все варианты lookaround, но это просто не сработает...

Кто-нибудь знает, как решить эту проблему?

Спасибо,
CFP.

1 ответ

Решение

Вы проверяете предварительный поиск только в конце совпадения, что означает, что он может сначала максимально соответствовать строке, а затем проверяет предварительный поиск. Так как у вас нет [[ в конце строки совпадение успешно.

Что вам нужно сделать, если вы действительно хотите использовать регулярные выражения, это проверить поиск по каждому добавляемому символу, например так:

>>> s = 'hello world! [[A string typically used in programming examples]]'
>>> regex = re.compile('(?P<question>((?!\[\[).)+)')
>>> regex.match(s).group('question')
'hello world! '

Но обратите внимание, что было бы гораздо проще просто использовать что-то вроде s.find('[[') вместо регулярных выражений здесь.

Другие вопросы по тегам