1

我正在用 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 中的断言正则表达式后面添加 .* 或在否定视图中执行类似的操作。

4

2 回答 2

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']

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

于 2011-07-15T08:08:04.563 回答
1

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

请参见egular-expressions.info上的功能列表

于 2011-07-15T08:07:43.970 回答