我是Regex的新手,目前正在编写Scrapy搜寻器来收集电子邮件地址。
我希望能够在抓取时选择不同格式的电子邮件。现在我发现任何带有@符号的东西 - 但想要更聪明一些。
如何选择以下格式的电子邮件?
以下是我目前的情况:
item['mail'] = hxs.select('//body//text()').re(r'[\w.-]+@[\w.-]+')
答案 0 :(得分:0)
这是我能想到的最好的,但除非你提供更多的例子,否则我真的不知道它是否适合你。
使用您问题中的当前示例,它可行。如果您不关心比这更复杂的电子邮件地址,那么这对您来说应该没问题。
[\w.-]+ ?(?:@|\[?at]?) ?[\w.-]+(?: ?\[?dot]? ?[\w.-]+)?
那我在这做什么?
我在@
符号处进行了更改,以便通过使用带有延迟量词的可选空格和括号来接受[at]
或at
:?
?(?:@|\[?at]?) ?
^ ^
lazy spaces
我在表达式的末尾做了类似的操作,但是我将整个非捕获组都设置为可选,因为否则会影响示例电子邮件中的前几行。