为什么python正则表达式模式在追加美元($)时无法匹配?

时间:2017-03-31 06:29:40

标签: python regex

这是一个使用python 3.4的小代码

import re
path_pattern=r'(([^\W]|[.~%$])+)'
re.search(path_pattern+'$','./').string

它将在执行时报告AttributeError: 'NoneType' object has no attribute 'string'

如果我删除了代码中的+'$',那就可以了,

import re
path_pattern=r'(([^\W]|[.~%$])+)'
re.search(path_pattern,'./').string

据我所知,$用于匹配字符串的结尾,但为什么不在这里工作呢?

2 个答案:

答案 0 :(得分:1)

如果您在https://regex101.com/探索正则表达式path_pattern,则会发现它只与.匹配,因此在您追加$之后,它将一无所有,并且如果字符串中没有位置与模式匹配,re.search将返回None,这就是您收到错误的原因。

在这里查看:

>>> path_pattern=r'(([^\W]|[.~%$])+)'
>>> r = re.search(path_pattern + "$",'./')
>>> print(r)
None

答案 1 :(得分:0)

您的正则表达式与字符串中的/字符不匹配。匹配。

当你在你的正则表达式中使用$时,它根本不匹配。当你删除它时,它只匹配"。"。