如何从 Python 中的字符串中提取数字?

问题描述

如果您只想提取正整数,请尝试以下操作:

>>> txt = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in txt.split() if s.isdigit()]
[23, 11, 2]

我认为这比正则表达式示例更好,因为您不需要另一个模块,而且它更具可读性,因为您不需要解析(和学习)正则表达式 mini- language

这将无法识别浮点数、负整数或十六进制格式的整数。如果您不能接受这些限制,下面的 jmnas 答案将起到作用。

我假设你想要浮点数而不仅仅是整数,所以我会做这样的事情:

l = []
for t in s.split():
    try:
        l.append(float(t))
    except ValueError:
        pass

请注意,此处发布的其他一些解决方案不适用于负数:

>>> re.findall(r'\b\d+\b', 'he33llo 42 I\'m a 32 string -30')
['42', '32', '30']

>>> '-3'.isdigit()
False

解决方法

我想提取字符串中包含的所有数字。哪个更适合目的,正则表达式或isdigit()方法?

例子:

line = "hello 12 hi 89"

结果:

[12,89]