使用re.match无法使用lookbehind的正则表达式

时间:2017-09-30 10:20:14

标签: python regex string lookbehind

以下python代码:

import re

line="http://google.com"
procLine = re.match(r'(?<=http).*', line)
if procLine.group() == "":
    print(line + ": did not match regex")
else:
    print(procLine.group())

不成功匹配,并输出以下错误:

  

Traceback(最近一次调用最后一次):文件   “C:/Users/myUser/Documents/myScript.py”,第5行,   在       如果procLine.group()==“”:AttributeError:'NoneType'对象没有属性'group'

当我用。*替换正则表达式时,它工作正常,这表明它是错误的正则表达式,但是,当我测试我的正则表达式和python风格的字符串时它https://regex101.com/似乎匹配正常。< / p>

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果您将lookbehind转换为非捕获组,则应该可以:

In [7]: re.match(r'(?:http://)(.*)', line)
Out[7]: <_sre.SRE_Match object; span=(0, 17), match='http://google.com'>

In [8]: _.group(1)
Out[8]: 'google.com'

lookbeind不起作用的原因是 - 因为Rawing mentioned - re.match从字符串的 start 开始查看,所以看看后面在字符串的 start 没有意义。

如果您坚持使用lookbehind,请切换到re.search

In [10]: re.search(r'(?<=http://).*', line)
Out[10]: <_sre.SRE_Match object; span=(7, 17), match='google.com'>

In [11]: _.group()
Out[11]: 'google.com'