我有一个字符串列表,我想打印出那些与正则表达式不匹配的字符串,但我遇到了一些麻烦。如果有一个从字符串开头开始的子字符串与正则表达式匹配,则正则表达式似乎与不应该匹配的字符串匹配。我不知道该怎么解决这个问题。
示例
>>> import re
>>> pattern = re.compile(r'\d+')
>>> string = u"1+*"
>>> bool(pattern.match(string))
True我之所以成为真,是因为一开始的1。我应该如何改变我的正则表达式来解决这个问题呢?
注意,我使用的是python 2.6.6
发布于 2018-01-15 11:45:09
让您的正则表达式以\A开头,以\Z结尾。这将确保匹配从输入字符串的开头开始,并确保匹配在输入字符串的末尾结束。
因此,对于您给出的示例,它将如下所示:
pattern = re.compile(r'\A\d+\Z')发布于 2018-01-15 11:50:36
您应该将\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'。
https://stackoverflow.com/questions/48256678
复制相似问题