Только для подсчета целых чисел вы можете использовать простое регулярное выражение :
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
s, например 1.2
и 3e-4
et c. также. Соответствующее регулярное выражение теперь намного сложнее, и более простым решением было бы просто l oop над всеми «словами» в строке и проверить, можно ли их интерпретировать как число:
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