<pre><code>In [63]: text = "ctcO6OgnWRAxLtu+akRCFwM asu.edu zOiV6Wo6nDnUhQkZO4XTySrTRwLMgozM9R/LyQs2r+Pb tarantino.cs.ucsb.edu,128.111.48.123 ssh-rsa 9SMF4U+qJW03Bh1"
In [64]: re.findall(r'(?:[a-zA-Z0-9]+\.)+[a-z]{2,10}', text)
Out[64]: ['asu.edu', 'tarantino.cs.ucsb.edu']
</code></pre>
<ul>
<li><p>使用<code>(?:...)</code>创建非捕获组。当模式包含多个分组模式(即用括号括起来的模式)时,<code>re.findall</code>为每个匹配项返回一个元组。要防止<code>re.findall</code>返回元组列表,请使用非捕获组。</p></li>
<li><p>对于您发布的<code>text</code>,模式{<cd5>}是不必要的。在<code>text</code>中没有文字<code>-</code>,因此<code>(-[a-zA-Z0-9]+)*</code><strong>从不匹配<code>text</code>中的任何内容</strong>。当然,如果您愿意,您可以将<code>(?:-[a-zA-Z0-9]+)*</code>添加到模式中(注意使用了非捕获组<code>(?:...)</code>),但是您发布的<code>text</code>并没有执行该部分模式。它可以让你把名字和海普思匹配起来,但是:</p>
^{pr2}$
<p>作为<a href="https://stackoverflow.com/questions/35246583/python-domain-name-list-regex/35246711#comment58207282_35246693">Aprillion noted</a>:</p>
<pre><code>In [74]: re.findall(r'(?:[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*\.)+[a-z]{2,10}', text)
Out[74]: ['asu.edu', 'tarantino.cs.ucsb.edu']
</code></pre></li>
<li><p>请参见<a href="https://regex101.com/r/vG4gS1/1" rel="nofollow noreferrer">regex101</a>以获得模式<code>(?:[a-zA-Z0-9]+\.)+[a-z]{2,10}</code></p></li>
</ul>