擅长:python、mysql、java
<p>如果使用<code>(group)+</code>,则组中只捕获最后匹配的文本。你知道吗</p>
<p>您应该将<code>findall</code>与稍微不同的regex一起使用。你知道吗</p>
<pre><code>s = 'the sixty six items'
>>> if re.match(r'the (?:(?:sixty|six)[ -]+)+items', s):
... re.findall(r"\b(sixty|six)[ -]+(?=.*\bitems\b)", s)
...
['sixty', 'six']
</code></pre>
<hr/>
<p>您的问题有以下代码:</p>
<pre><code>>>> r = "the ((sixty|six)[ -]+)+items"
>>> s = "the sixty six items"
>>> re.findall(r, s)
</code></pre>
<p>它返回<code>[('six ', 'six')]</code>,因为在你的组后面使用了量词,即<code>((sixty|six)[ -]+)+</code></p>
<p><code>findall</code>返回两个</p>
<ol>
<li><code>captured group #1</code>是<code>"six "</code>(注意这里的空格是由于第一个组中的<code>[ -]+</code>)</li>
<li><code>captured group #2</code>是<code>"six"</code>(内部组,即<code>(sixty|six)</code>)</li>
</ol>