如何计算字符串中数字的个数

How can I count the number of numbers in a string

我想统计 s 字符串中数字的个数。

在此字符串中:

"2019 was a great year for 10 fortunate people in ages 20 to 60."

结果应该是 4 (2019, 10, 20, 60) 谢谢

re.findall 是一种非常简单的处理方法:

import re

s = "2019 was a great year for 10 fortunate people in ages 20 to 60."

# find all groups of digits
re.findall(r'\d+', s)
# ['2019', '10', '20', '60']

这假设数字不是带小数点的浮点数或其他非整数。

我会使用 s.split(' ') 将字符串拆分为标记并遍历每个标记并使用像 \d+ 这样的正则表达式来测试每个字符都是数字,并在 int 中积累良好的测试响应。

仅计算整数,您可以使用简单的 regular expression:

import re
s = '2019 was a great year for 10 fortunate people in ages 20 to 60.'
n = len(re.findall(r'\d+', s))  # 4

这里'\d+'表示"one or more decimal characters in a row".

请注意 re.findall 产生了 list 个结果。如果您只关心元素的数量 (n),这对于包含非常多数字的输入字符串来说是一种浪费。相反,使用迭代器方法,例如

import re
s = '2019 was a great year for 10 fortunate people in ages 20 to 60.'
n = sum(1 for _ in re.finditer(r'\d+', s))  # 4

合并花车

假设您也允许 float,例如 1.23e-4 等。相应的正则表达式现在要复杂得多,更简单的解决方案是遍历字符串中的所有 "words" 并检查它们是否可以解释为数字:

def is_number(num):
    try:
        float(num)
    except:
        return False
    return True

s = '2019 was a great year for 10 fortunate people in ages 20 to 60.'
n = sum(1 for num in s.split() if is_number(num))  # 4