RegEx检查字符串是否为数字

时间:2017-06-12 19:07:25

标签: python regex string

我有一个值,我认为是一个数字,但我用来确认值是一个数字的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失败或者这不是一个数字吗?

感谢。

3 个答案:

答案 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

匹配的例子

  • 123
  • 1
  • 59
  • 39,8
  • 1 259,12312

不匹配:

  • ,,
  • 10,
  • ,0

答案 2 :(得分:0)

这样做可能会更好吗?

>>> val = 92092
>>> type(val)
<class 'int'>
>>> val = 893.22
>>> type(val)
<class 'float'>

此外,如果您想继续使用RegEx ...请尝试:(\ d)+