Python 不应该进行的正则表达式匹配

Python regex matching when it should not

我有一个字符串列表,我想打印出与正则表达式不匹配的字符串,但我遇到了一些麻烦。正则表达式似乎匹配它不应该匹配的字符串,如果有一个子字符串从匹配正则表达式的字符串的开头开始。我不确定如何解决这个问题。

示例

>>> import re
>>> pattern = re.compile(r'\d+')
>>> string = u"1+*"
>>> bool(pattern.match(string))
True

因为开头的 1,所以我是对的。我应该如何更改我的正则表达式来解决这个问题?

注意我在 python 2.6.6

让您的正则表达式以 \A 开头并以 \Z 结尾。这将确保匹配从输入字符串的开头开始,并确保匹配在输入字符串的末尾结束。

因此对于您给出的示例,它看起来像:

pattern = re.compile(r'\A\d+\Z')

您应该将 \Z 附加到正则表达式的末尾,因此正则表达式模式为 '\d+\Z'.

您的代码将变为:

>>> import re
>>> pattern = re.compile(r'\d+\Z')
>>> string = u"1+*"
>>> bool(pattern.match(string))
False

这是可行的,因为 \Z 强制只在字符串的末尾进行匹配。您也可以使用 $,它强制在字符串末尾之前或 string 末尾的换行符处进行匹配。如果你想强制字符串只包含数值(如果使用 re.match 则无关紧要,但如果使用其他正则表达式库可能有用),你可以在模式的前面添加一个 ^,在字符串的开头强制匹配。模式将是 '^\d+\Z'.