Python中的正则表达式:“\ d +”和“[0-9] +不仅识别数字和数字而且还识别运算符?

时间:2014-02-27 14:21:40

标签: python regex python-2.7

在涵盖这一点的所有参考书和论坛讨论中,我总是读到以下表达式"[0-9]""\d"只能识别单个数字(而不是其他任何内容)

因此,我会得出结论,正则表达式"\d+"只会识别由数字组成的字符串,而不会识别其他字符串(例如"343535")。

但是,此表达式还可识别可表示数学运算的字符串。

例如: 检查正则表达式"3-5"的字符串"5+6""\d+"将始终返回True

怎么会这样?如果我想确保字符串真的只包含数字(并且没有运算符),我如何修改我的正则表达式呢?

1 个答案:

答案 0 :(得分:6)

您需要锚定正则表达式:

r'^\d+$'

否则你将匹配字符串的 part ;除非您告诉解析器也查找输入字符串的开头和结尾,否则任何带有1位或更多位的字符串都将匹配。

演示:

>>> import re
>>> a_number = re.compile(r'\d+')
>>> only_a_number = re.compile(r'^\d+$')
>>> a_number.search('This string is not a number, but does *contain* 1') is not None
True
>>> only_a_number.search('This string is not a number, but does *contain* 1') is not None
False
>>> a_number.search('1') is not None
True
>>> only_a_number.search('1') is not None
True

请注意,我在这里使用re.search();如果您使用re.match()而是将隐式\A添加到模式的开头(在输入字符串的开头匹配)。