正则表达式来检查一个字符串是否是一个数字
我有一个值,我相信是一个数字,但我用来确认该值是一个数字的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
有人能向我解释为什么无论我正则表达式失败或如何,是不是多少?
谢谢。
一个整数(整数)是一个或多个数字的序列。所以:
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说:你可以用[,.]
取代,
在正则表达式允许点(.
)用作小数点以及。
是在欧洲用于小数点的逗号还是一个错字?也许'\ d +(?:[,。] \ d *)'会更好 – chris85
@ chris85:在比利时逗号确实用作小数点。我不了解欧洲其他地区。 –
要匹配数字,可能的空格和逗号,你可以使用r'[\d ]+(,\d+)?'
它也会给加或不加逗号数完全匹配,但没有无效逗号出现像,,
或1,
或,9
什么
例子它将匹配
- 39,8
- 1 259,12312
不会匹配:
- ,,
- 10,
- ,0
@ chris85确实。感谢我在正则表达式上总是太快。更新以捕获更多案例并且不匹配其他 –
也许是更好这样做?
>>> val = 92092
>>> type(val)
<class 'int'>
>>> val = 893.22
>>> type(val)
<class 'float'>
另外,如果你想留在正则表达式...尝试:(\ d)+
您可以通过执行以下操作来测试它是否为int:if(type(val)== int):print('is int'); – OmaRPR
为什么你使用逗号? –
如果您正在查找一串数字,请使用'\ d +' –
在RegEx中?因为有时候我会用逗号来遇到数字,所以我也需要考虑这些。像'2,345' – theprowler