相当于(。*)在断言Regex Python背后的负面看法

时间:2011-07-15 08:00:09

标签: python regex negative-lookbehind

我在Python中编写了一个负面的lookbehind断言表达式,它执行以下函数来解析纯文本文件:

在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中断言正则表达式后面的负面看法中做类似的opearion。

2 个答案:

答案 0 :(得分:2)

问题: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']

或 - 作为另一种解决方案 - 使用正则表达式匹配网址来切断字符串中的所有网址,然后搜索r'[a-z][a-z][0-9]'

答案 1 :(得分:1)

那是不可能的。 Python只允许固定长度的lookbehinds。这意味着在外观中没有量词。

在此处查看egular-expressions.info

上的功能列表