匹配HTML标记中未包含的电子邮件地址

时间:2010-04-29 01:55:59

标签: python regex email

我需要在文本中突出显示电子邮件地址,但如果包含在HTML标记,内容或属性中,则不要突出显示它们。

例如,字符串example@example.com必须转换为<a href="mailto:example@example.com">example@example.com</a>

但不得处理字符串<a href="mailto:example@example.com">example@example.com</a>中的电子邮件地址。

我尝试了类似这样的正则表达式:

(?<![":])[a-zA-Z0-9._%-+]+@[a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}(?!")

但它无法正常工作。

1 个答案:

答案 0 :(得分:1)

我猜测你的源文本是一个HTML文件,它只缺少一些包含的电子邮件地址的锚标签。如果是这样,那么您将无法使用正则表达式来可靠地匹配未标记的电子邮件地址。例如,给定输入:

...
<P>You'll find a lot more written by <A 
href="mailto:SvartaIF@example.com"
title="some text including an@sign.org">

SvartaIF@example.com
</A>.
</P>
...

无法将href与地址词汇关联,也不能排除an@sign.org。您需要使用HTML解析器; BeautifulSoup很受欢迎。