擅长:python、mysql、java
<p>对于仅计数整数,可以使用简单的<a href="https://docs.python.org/3/library/re.html" rel="nofollow noreferrer">regular expression</a>:</p>
<pre class="lang-py prettyprint-override"><code>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
</code></pre>
<p>这里<code>'\d+'</code>表示“一行中的一个或多个十进制字符”</p>
<p>请注意<code>re.findall</code>生成<code>list</code>个结果。如果您只关心元素的数量(<code>n</code>),那么对于包含很多数字的输入字符串来说,这是浪费。相反,使用迭代器方法,例如</p>
<pre class="lang-py prettyprint-override"><code>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
</code></pre>
<h3>合并浮动</h3>
<p>假设您也允许<code>float</code>这样的<code>1.2</code>和<code>3e-4</code>等。相应的正则表达式现在要复杂得多,更简单的解决方案是循环字符串中的所有“单词”,并检查它们是否可以解释为数字:</p>
<pre class="lang-py prettyprint-override"><code>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
</code></pre>