使用 re.match 后向的正则表达式无法正常工作
Regex with lookbehind not working using re.match
以下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 (most recent call last): File
"C:/Users/myUser/Documents/myScript.py", line 5,
in
if procLine.group() == "": AttributeError: 'NoneType' object has no attribute 'group'
当我用 .* 替换正则表达式时,它工作正常,这表明它是错误的正则表达式,但是,在 https://regex101.com/ 上,当我测试我的正则表达式和字符串的 python 风味时看起来很匹配。
有什么想法吗?
如果您将后视转换为非捕获组,这应该有效:
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 不起作用的原因是因为 - - re.match
从字符串的 start 开始查找,所以看一下behind 在字符串的 start 处没有意义。
如果您坚持使用后视,请切换到 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'
以下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 (most recent call last): File "C:/Users/myUser/Documents/myScript.py", line 5, in if procLine.group() == "": AttributeError: 'NoneType' object has no attribute 'group'
当我用 .* 替换正则表达式时,它工作正常,这表明它是错误的正则表达式,但是,在 https://regex101.com/ 上,当我测试我的正则表达式和字符串的 python 风味时看起来很匹配。
有什么想法吗?
如果您将后视转换为非捕获组,这应该有效:
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 不起作用的原因是因为 - re.match
从字符串的 start 开始查找,所以看一下behind 在字符串的 start 处没有意义。
如果您坚持使用后视,请切换到 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'