如何检查字符串是否包含Python中的数字?
我有一个变量,我将其转换为float,但我想创建if语句,只有在它只包含数字时才将其转换为float。
答案 0 :(得分:10)
只需将其转换并在失败时捕获异常。
s = "3.14"
try:
val = float(s)
except ValueError:
val = None
答案 1 :(得分:3)
我会使用try-except块来确定它是否为数字。这样,如果s是数字,则转换成功,如果不是,则捕获ValueError,因此程序不会中断。
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
答案 2 :(得分:2)
您也可以从字符串中提取数字。
import string
extract_digits = lambda x: "".join(char for char in x if char in string.digits + ".")
然后将它们转换为float。
to_float = lambda x: float(x) if x.count(".") <= 1 else None
>>> token = "My pants got 2.5 legs"
>>> extract_digits(token)
'2.5'
>>> to_float(_)
2.5
>>> token = "this is not a valid number: 2.5.52"
>>> extract_digits(token)
'2.5.52'
>>> to_float(_)
None
答案 3 :(得分:2)
为什么不为此内置.isdigit()
。紧凑,没有try
语句,超快:
string = float(string) if string.isdigit() else string
在考虑Python中的错误处理时,我相信是Yoda大师说:“没有尝试。不管做什么。”
答案 4 :(得分:1)
import re
mystring = '.0323asdffa'
def find_number_with_or_without_decimal(mystring):
return re.findall(r"^\.?\d+", mystring)
In [1]: find_number_with_or_without_decimal(mystring)
Out[1]: ['.0323']
正则表达式说,'找到一个以小数点开头的东西('^'表示仅在行的开头,'?'表示最多为1;小数用'\'转义,所以它赢了它的特殊正则表达式意思是“任何字符”)并且具有任意数量的数字。祝你好运!