<p><strong><code>regex</code>模块:无限查找和其他功能</p>
<p>如果您想使用regex,我建议您使用未完成的<a href="https://pypi.python.org/pypi/regex" rel="nofollow">^{<cd1>} module</a>而不是<code>re</code>。此正则表达式将返回所有匹配项:</p>
<pre><code>(?<=(?<!X\S+)To:\s*(?:[^@\s]+@[^\,\s]+,\s*)*?)[^@\s]+@[^\,\s]+
</code></pre>
<p><strong>示例代码</strong></p>
<p>我在python3.4中对此进行了测试。你知道吗</p>
<pre><code>import regex
subject = """Date: Wed, 6 Dec 2000 02:03:00 -0800 (PST)
From: donald.herrick@enron.com
To: brianherrick@email.msn.com, herriceu2@tdprs.state.tx.us,
robertherrick@bankunited.com, kristi.demaiolo@enron.com,
suresh.raghavan@enron.com, harry.arora@enron.com
Subject: FW: If Santa Answered his mail...
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-From: Donald W Herrick
X-To: brianherrick@email.msn.com, HERRICEU2@tdprs.state.tx.us, RobertHerrick@bankunited.com, Kristi Demaiolo, Suresh Raghavan, Harry Arora
X-cc:
X-bcc: """
pattern = "(?<=(?<!X\S+)To:\s*(?:[^@\s]+@[^\,\s]+,\s*)*?)[^@\s]+@[^\,\s]+"
for match in regex.finditer(pattern, subject):
print(match.group())
</code></pre>
<p><strong>输出</strong></p>
<pre><code>brianherrick@email.msn.com
herriceu2@tdprs.state.tx.us
robertherrick@bankunited.com
kristi.demaiolo@enron.com
suresh.raghavan@enron.com
harry.arora@enron.com
</code></pre>
<p><strong>解释</strong></p>
<ul>
<li>我们有一个大的lookback,然后是一个非常基本的电子邮件匹配器:<code>[^@\s]+@[^\,\s]+</code>,它匹配任何不是arrobas或空格字符的字符,然后是arrobas,然后是任何不是逗号或空格字符的字符(输入中电子邮件分隔符的结尾)</li>
<li>如果需要的话,可以用一个更复杂的email regex来代替email matcher</li>
<li>现在到后面的大了望台``(?<;=(?
</li><li>第一部分<code>(?<!X-)To:\s*</code>与<code>To:</code>匹配,只要它前面没有<code>Xsomething</code>,正如负lookback <code>(?<!X-)</code>所断言的那样</li>
<li>非捕获组<code>(?:[^@\s]+@[^\,\s]+,\s*)*?</code>根据需要匹配表达式<code>[^@\s]+@[^\,\s]+,\s*</code>的<code>*?</code>量词,以允许lookback后面的内容匹配。这是一个“电子邮件跳过器”,让我们逐步跳过越来越多的电子邮件与每一场比赛</li>
<li><code>[^@\s]+@[^\,\s]+,\s*</code>只是一封简陋的电子邮件,后跟一个coma和可选的空格字符(<code>\s</code>不仅匹配空格,还匹配回车符、制表符等)</li>
</ul>