Python正则表达式匹配,但不应匹配
我有一个字符串列表,我想打印出与正则表达式不匹配的字符串,但我遇到了一些问题。如果有一个子字符串开始于与正则表达式匹配的字符串的开头,则正则表达式似乎与不应匹配的字符串匹配。我不知道如何解决这个问题 范例Python正则表达式匹配,但不应匹配,python,regex,python-2.6,Python,Regex,Python 2.6,我有一个字符串列表,我想打印出与正则表达式不匹配的字符串,但我遇到了一些问题。如果有一个子字符串开始于与正则表达式匹配的字符串的开头,则正则表达式似乎与不应匹配的字符串匹配。我不知道如何解决这个问题 范例 >>> import re >>> pattern = re.compile(r'\d+') >>> string = u"1+*" >>> bool(pattern.match(string)) True 我之所以成为
>>> import re
>>> pattern = re.compile(r'\d+')
>>> string = u"1+*"
>>> bool(pattern.match(string))
True
我之所以成为true,是因为一开始的1
。我应该如何更改我的正则表达式来说明这一点
注意,我使用的是Python2.6.6,让正则表达式以
\A
开头,以\Z
结尾。这将确保匹配从输入字符串的开头开始,也确保匹配在输入字符串的结尾结束
因此,对于您给出的示例,它看起来像:
pattern = re.compile(r'\A\d+\Z')
让正则表达式以
\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
仅强制在字符串末尾进行匹配。您还可以使用$
,强制在字符串结尾之前的换行符或字符串结尾处进行匹配。如果要强制字符串仅包含数值(如果使用re.match
,则不相关,但如果使用其他正则表达式库,则可能有用),可以在模式的前面添加^
,强制在字符串的开头进行匹配。然后,模式将是'^\d+\Z'
您应该将\Z
附加到正则表达式的末尾,因此正则表达式模式是'\d+\Z'
然后,您的代码变成:
>>> import re
>>> pattern = re.compile(r'\d+\Z')
>>> string = u"1+*"
>>> bool(pattern.match(string))
False
这是因为
\Z
仅强制在字符串末尾进行匹配。您还可以使用$
,强制在字符串结尾之前的换行符或字符串结尾处进行匹配。如果要强制字符串仅包含数值(如果使用re.match
,则不相关,但如果使用其他正则表达式库,则可能有用),可以在模式的前面添加^
,强制在字符串的开头进行匹配。然后模式将是“^\d+\Z”
我知道。但是,如果他们将代码更改为re.search
,则不会更改(但是,重新搜索是没有意义的)。刚才添加的主要是为了完整性,因为大多数正则表达式库的工作方式不同(就像我最喜欢的库,re2
),我知道。但是,如果他们将代码更改为re.search
,则不会更改(但是,重新搜索是没有意义的)。刚才添加的主要是为了完整性,因为大多数正则表达式库的工作方式不同(就像我最喜欢的库,re2
)。正则表达式匹配数字,字符串包含数字。您已经收到了一些基于您不希望字符串包含任何其他内容的假设的答案,但是您的问题并不清楚这是否真的是这样。也许你应该用它来澄清你想要什么。你的正则表达式匹配数字,字符串包含一个数字。您已经收到了一些基于您不希望字符串包含任何其他内容的假设的答案,但是您的问题并不清楚这是否真的是这样。也许你应该用它来澄清你想要什么。