gpt4 book ai didi

python - 具有lookbehind的正则表达式无法使用re.match工作

转载 作者:行者123 更新时间:2023-11-30 22:28:54 26 4
gpt4 key购买 nike

以下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 风格时,它似乎匹配得很好。

有什么想法吗?

最佳答案

如果您将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 不起作用的原因是 - as Rawing mentioned - re.match 从字符串的开头开始查找,因此后面会查看字符串的开头字符串没有意义。

<小时/>

如果您坚持使用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'

关于python - 具有lookbehind的正则表达式无法使用re.match工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46501800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com