在Python中检查字符串中的数字

时间:2011-08-04 13:00:40

标签: python string numbers

如何检查字符串是否包含Python中的数字?

我有一个变量,我将其转换为float,但我想创建if语句,只有在它只包含数字时才将其转换为float。

5 个答案:

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

迈克尔巴伯的答案最适合速度,因为没有不必要的逻辑。如果由于某种原因您发现需要进行更细化的评估,则可以使用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']

正则表达式说,'找到一个以小数点开头的东西('^'表示仅在行的开头,'?'表示最多为1;小数用'\'转义,所以它赢了它的特殊正则表达式意思是“任何字符”)并且具有任意数量的数字。祝你好运!