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

Пытаясь ответить на этот вопрос , я создал это регулярное выражение Python для соответствия любой подстроке egg, за которой следует цифра, не являющаяся частью URL, перед которой стоит http://:

>>> r = re.compile('(?:\s(?!http://\S*))egg\d')

Затем я применил его к следующей строке:

>>> a = "a egg1 http://egg2.com egg3 http://www.egg4.org egg5"

Результат:

>>> r.findall(a)
[' egg1', ' egg3', ' egg5']

Регулярное выражение некорректно для многих других проблем, но одна ошибкаподробнее: почему в результате появляется пробел?Поскольку я использовал утверждение типа lookahead вроде (?:\s...), не следует ли его исключить из результирующих строк?

Ответы [ 2 ]

1 голос
/ 28 июля 2011

(?: - не заблаговременно, а не группа захвата.Таким образом, он не создает свой собственный захват, но он является частью полного соответствия.

1 голос
/ 28 июля 2011

(?:...) не является предварительным утверждением, это просто пара неиспользованных пареннов (то есть то, что соответствует внутреннему регулярному выражению, не влияет на его собственную группу, оно существует только для приоритета). (?=...) является предварительным утверждением.

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