在涵盖这一点的所有参考书和论坛讨论中,我总是读到以下表达式"[0-9]"
和"\d"
只能识别单个数字(而不是其他任何内容)
因此,我会得出结论,正则表达式"\d+"
只会识别由数字组成的字符串,而不会识别其他字符串(例如"343535"
)。
但是,此表达式还可识别可表示数学运算的字符串。
例如:
检查正则表达式"3-5"
的字符串"5+6"
或"\d+"
将始终返回True
怎么会这样?如果我想确保字符串真的只包含数字(并且没有运算符),我如何修改我的正则表达式呢?
答案 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
添加到模式的开头(在输入字符串的开头匹配)。