【发布时间】:2011-08-04 13:00:39
【问题描述】:
Python中如何判断字符串是否包含数字?
我有一个要转换为浮点数的变量,但我想制作 if 语句,仅当它只包含数字时才将其转换为浮点数。
【问题讨论】:
-
还有一点,变量中的数字就像“0.123”
-
转换为浮点数仍然有效
Python中如何判断字符串是否包含数字?
我有一个要转换为浮点数的变量,但我想制作 if 语句,仅当它只包含数字时才将其转换为浮点数。
【问题讨论】:
只要转换它,如果失败就捕获异常。
s = "3.14"
try:
val = float(s)
except ValueError:
val = None
【讨论】:
math.isnan(s)。
math.isinf 进行检查。虽然不是数字,但所有三个都是有效的浮点数,因此是否包含它们可能取决于这些浮点数的预期用途。
我会使用 try-except 块来确定它是否是一个数字。这样,如果 s 是一个数字,则强制转换成功,如果不是,则捕获 ValueError,因此您的程序不会中断。
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
【讨论】:
您还可以从字符串中提取数字。
import string
extract_digits = lambda x: "".join(char for char in x if char in string.digits + ".")
然后将它们转换为浮点数。
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
【讨论】:
为什么不为此使用内置的.isdigit()。紧凑,没有try 语句,而且超级快:
string = float(string) if string.isdigit() else string
在考虑 Python 中的错误处理时,我相信是尤达大师说过,“没有尝试。做或不做。”
【讨论】:
Michael Barber 的回答对于速度来说是最好的,因为没有不必要的逻辑。如果由于某种原因您发现需要进行更精细的评估,您可以使用 Python 标准库的正则表达式模块。如果您决定,例如,您想要获得您所描述的数字,但有您想要叠加的其他标准,这将对您有所帮助。
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']
正则表达式说,'找到以最多一位小数开头的东西('^'表示仅在行首,'?'表示最多一位;小数用'\'转义,所以它赢了'没有其特殊的正则表达式含义'任何字符')并且具有任意数量的数字。祝 Python 好运!
【讨论】: