<p><code>re.search</code>最多找到一个匹配项。要查找多个匹配项,可以使用<code>re.findall</code>,它返回匹配字符串的列表:</p>
<pre><code>import re
x = """ hi i am laughing like hahahahahahaha. and i use it regularly"""
y = re.compile(r'(ha)')
print(y.findall(x))
</code></pre>
<p><strong>输出</strong></p>
^{pr2}$
<p>如果需要实际匹配的对象而不是字符串,可以使用<code>re.finditer</code>:</p>
^{3}$
<p><strong>输出</strong></p>
<pre><code><_sre.SRE_Match object; span=(23, 25), match='ha'>
<_sre.SRE_Match object; span=(25, 27), match='ha'>
<_sre.SRE_Match object; span=(27, 29), match='ha'>
<_sre.SRE_Match object; span=(29, 31), match='ha'>
<_sre.SRE_Match object; span=(31, 33), match='ha'>
<_sre.SRE_Match object; span=(33, 35), match='ha'>
<_sre.SRE_Match object; span=(35, 37), match='ha'>
</code></pre>
<hr/>
<p>如果你想找到所有重复的<em>模式,你需要一个稍微不同的策略。一种方法是使用<code>re.search</code>并在匹配点处剪切目标字符串并再次搜索,直到没有找到更多匹配项。在</p>
<pre><code>import re
x = """ hi i am laughing like hahahahahahaha. and i use it regularly"""
y = re.compile(r'(ha){1,5}')
patlen = 2
target = str(x)
while True:
m = y.search(target)
if not m:
break
target = target[patlen + m.start(0):]
print(m.group(0))
</code></pre>
<p><strong>输出</strong></p>
<pre><code>hahahahaha
hahahahaha
hahahahaha
hahahaha
hahaha
haha
ha
</code></pre>