2017-06-12 118 views
0

我有一个值,我相信是一个数字,但我用来确认该值是一个数字的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 

有人能向我解释为什么无论我正则表达式失败或如何,是不是多少?

谢谢。

+0

为什么你使用逗号? –

+2

如果您正在查找一串数字,请使用'\ d +' –

+0

在RegEx中?因为有时候我会用逗号来遇到数字,所以我也需要考虑这些。像'2,345' – theprowler

回答

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说:你可以用[,.]取代,在正则表达式允许点(.)用作小数点以及。

+0

是在欧洲用于小数点的逗号还是一个错字?也许'\ d +(?:[,。] \ d *)'会更好 – chris85

+1

@ chris85:在比利时逗号确实用作小数点。我不了解欧洲其他地区。 –

2

要匹配数字,可能的空格和逗号,你可以使用r'[\d ]+(,\d+)?' 它也会给加或不加逗号数完全匹配,但没有无效逗号出现像,,1,,9什么

例子它将匹配

  • 39,8
  • 1 259,12312

不会匹配:

  • ,,
  • 10,
  • ,0
+0

@ chris85确实。感谢我在正则表达式上总是太快。更新以捕获更多案例并且不匹配其他 –

1

也许是更好这样做?

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

另外,如果你想留在正则表达式...尝试:(\ d)+

+0

您可以通过执行以下操作来测试它是否为int:if(type(val)== int):print('is int'); – OmaRPR

相关问题