Python正则表达式匹配时不应该

时间:2018-01-15 03:42:54

标签: python regex python-2.6

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

实施例

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

我因为1一开始就成了现实。我应该如何改变我的正则表达式来解释这个问题?

注意我在python 2.6.6

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

您应该将\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'