Эквивалент (. *) В отрицательном взгляде за утверждением Regex Python - PullRequest
1 голос
/ 15 июля 2011

Я пишу отрицательное выражение утверждения позади в Python, которое выполняет следующую функцию для анализа простого текстового файла:

Не соответствует ничего, что следует после http://**********;но будет соответствовать шаблону, когда он не находится внутри http://* ссылки

Example:
http://www.test.com/aa4   cd6
bx2 vq9 
yu9 http://www.bh9.com/cj3

Matches: cd6,bx2,vq9 and yu9

Так что я попробовал регулярные выражения типа

r'(?<!http://(.*))([a-z][a-z][0-9])'
r'(?<!http://*)([a-z][a-z][0-9])'

Они не работалидобавить. * или сделать аналогичный оператор внутри отрицательного взгляда за регулярным выражением утверждения в Python.

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Проблема: Lookbehind не допускает шаблон, длина которого не фиксирована.

Быстрый взлом: Возможно, следующее регулярное выражение выполняет работу?

r'(?<![./])[a-z][a-z][0-9]'

Это работает так:

>>> str = """http://www.test.com/aa4
... bx2 vq9 
... http://www.bh9.com/cj3
... """
>>> re.findall(r'(?<![./])[a-z][a-z][0-9]',str)
['bx2', 'vq9']

Или - в качестве другого решения - используйте регулярные выражения, соответствующие URL-адресам, чтобы обрезать все URL-адреса в вашей строке, а затем найдите r'[a-z][a-z][0-9]'

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

Это невозможно.Python допускает просмотр только за фиксированную длину.Это означает, что в видоискателе нет квантификатора.

См. Здесь список функций на egular-expressions.info

...