正则表达式在HTML中选择不同的电子邮件格式

时间:2015-02-23 22:08:38

标签: python regex email

我是Regex的新手,目前正在编写Scrapy搜寻器来收集电子邮件地址。

我希望能够在抓取时选择不同格式的电子邮件。现在我发现任何带有@符号的东西 - 但想要更聪明一些。

如何选择以下格式的电子邮件?

  • info@example.com
  • info [at] example [dot] com
  • info at example.com info
  • info at example com

以下是我目前的情况:

item['mail'] = hxs.select('//body//text()').re(r'[\w.-]+@[\w.-]+')

1 个答案:

答案 0 :(得分:0)

这是我能想到的最好的,但除非你提供更多的例子,否则我真的不知道它是否适合你。

使用您问题中的当前示例,它可行。如果您不关心比这更复杂的电子邮件地址,那么这对您来说应该没问题。

[\w.-]+ ?(?:@|\[?at]?) ?[\w.-]+(?: ?\[?dot]? ?[\w.-]+)?

那我在这做什么? 我在@符号处进行了更改,以便通过使用带有延迟量词的可选空格和括号来接受[at]at?

 ?(?:@|\[?at]?) ?
^              ^
   lazy spaces

我在表达式的末尾做了类似的操作,但是我将整个非捕获组都设置为可选,因为否则会影响示例电子邮件中的前几行。

https://regex101.com/r/aC4kW3/1