我有一个字符串列表,我想打印出与正则表达式不匹配的字符串,但我遇到了麻烦。正则表达式似乎匹配它不应该的字符串,如果有一个子字符串从字符串的开头开始匹配正则表达式。我不知道如何解决这个问题。
实施例
>>> import re
>>> pattern = re.compile(r'\d+')
>>> string = u"1+*"
>>> bool(pattern.match(string))
True
我因为1
一开始就成了现实。我应该如何改变我的正则表达式来解释这个问题?
注意我在python 2.6.6
上答案 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'
。