Прекратить сопоставление при встрече последовательности символов: исправление вида сзади - PullRequest
3 голосов
/ 03 апреля 2010

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

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

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

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

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

Спасибо
CFP.

1 Ответ

3 голосов
/ 03 апреля 2010

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

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

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

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

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