如何计算字符串中数字的个数
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.2
和 3e-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
我想统计 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.2
和 3e-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