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

2024-10-02 22:31:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想数一数s字符串中的数字

在此字符串中:

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

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


Tags: to字符串infor数字peopleyearwas
3条回答

我将使用s.split(' ')将字符串拆分为标记,并对每个标记进行迭代,然后使用类似\d+的正则表达式来测试每个字符是否为数字,并在int中累积良好的测试响应

^{}是处理此问题的一种非常简单的方法:

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']

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

对于仅计数整数,可以使用简单的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+'表示“一行中的一个或多个十进制字符”

请注意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等。相应的正则表达式现在要复杂得多,更简单的解决方案是循环字符串中的所有“单词”,并检查它们是否可以解释为数字:

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

相关问题 更多 >