我有一个值,我认为是一个数字,但我用来确认值是一个数字的RegEx失败了。
我不确定它的价值是错还是RegEx,因为这个RegEx在过去的情况下对我有效。
regnumber = re.compile(r"(\d),(\d) | (\d)")
print("final weight:", weight)
if regnumber.search(weight):
print("weight = an int")
else:
print("weight does not = int")
这段代码产生:
final weight: 7088
weight does not = int
有人可以向我解释为什么我的RegEx失败或者这不是一个数字吗?
感谢。
答案 0 :(得分:4)
整数(整数)是一个或多个数字的序列。所以:
re.compile(r'\d+')
但在这种情况下,您不需要正则表达式,只需str.isdigit()
即可:
if weight.isdigit():
print("weight = an int")
else:
print("weight does not = int")
十进制数,可以与以下正则表达式匹配:
re.compile(r'\d+(?:,\d*)?')
所以你可以用以下方法检查输入:
regnumber = re.compile(r'\d+(?:,\d*)?')
print("final weight:", weight)
if regnumber.match(weight):
print("weight = a number")
else:
print("weight does not = number")
请注意,正则表达式将查找任何子序列。所以'foo123,45bar'
也会匹配。您可以使用^
和$
锚点强制完全匹配:
regnumber = re.compile(r'^\d+(?:,\d*)?$')
print("final weight:", weight)
if regnumber.match(weight):
print("weight = a number")
else:
print("weight does not = number")
与@chris85类似:您可以使用,
替换正则表达式中的[,.]
,以允许点(.
)也用作小数点。
答案 1 :(得分:2)
要匹配数字,可能的空格和逗号,您可以使用r'[\d ]+(,\d+)?'
它还会为包含或不包含逗号的数字提供完全匹配,但不会出现无效的逗号,例如,,
或1,
或,9
匹配的例子
不匹配:
答案 2 :(得分:0)
这样做可能会更好吗?
>>> val = 92092
>>> type(val)
<class 'int'>
>>> val = 893.22
>>> type(val)
<class 'float'>
此外,如果您想继续使用RegEx ...请尝试:(\ d)+