首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python正则表达式匹配,而不应该匹配

Python正则表达式匹配,而不应该匹配
EN

Stack Overflow用户
提问于 2018-01-15 11:42:54
回答 2查看 111关注 0票数 0

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

示例

代码语言:javascript
复制
>>> import re
>>> pattern = re.compile(r'\d+')
>>> string = u"1+*"
>>> bool(pattern.match(string))
True

我之所以成为真,是因为一开始的1。我应该如何改变我的正则表达式来解决这个问题呢?

注意,我使用的是python 2.6.6

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-15 11:45:09

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

因此,对于您给出的示例,它将如下所示:

代码语言:javascript
复制
pattern = re.compile(r'\A\d+\Z')
票数 2
EN

Stack Overflow用户

发布于 2018-01-15 11:50:36

您应该将\Z附加到正则表达式的末尾,这样正则表达式模式就是'\d+\Z'

然后你的代码就变成了:

代码语言:javascript
复制
>>> import re
>>> pattern = re.compile(r'\d+\Z')
>>> string = u"1+*"
>>> bool(pattern.match(string))
False

这之所以有效,是因为\Z仅在字符串的末尾强制匹配。您还可以使用$,它强制在字符串末尾或string末尾的换行处进行匹配。如果希望强制字符串仅包含数字值(如果使用re.match,则不相关,但如果使用其他正则表达式库,则可能很有用),可以在模式的前面添加^,强制在字符串的开头进行匹配。然后,该模式将是'^\d+\Z'

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48256678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档