Прекратить сопоставление при встрече последовательности символов: исправление вида сзади
У меня есть следующее регулярное выражение:
(?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('[[')
вместо регулярных выражений здесь.