【问题标题】:Python parse email address with regexPython 使用正则表达式解析电子邮件地址
【发布时间】:2016-02-20 15:01:03
【问题描述】:

我是 python 正则表达式的初学者

目标test.php代码:

<html>
  <head></head> 
  <body>
    <a href="www.google.com">josn2051@yahoo.com.tw</a>
    <div>john@yahoo.com.tw</div>
    testtest321@gmail.com
    chorm3636@test.test.test.com
  </body>
</html>

这是我的代码:

import requests,re

email_pattern = re.compile('([\w\-\.]+@(\w[\w\-]+\.)+[\w\-]+)')

res = requests.get("http://127.0.0.1/test.php")

a = email_pattern.findall(res.text)

print a

结果:

[(u'josn2051@yahoo.com.tw', u'com.'), (u'john@yahoo.com.tw', u'com.'), (u'asdfFGw@gmail.com', u'gmail.'), (u'chorm3636@test.test.test.com', 你'测试')]

但我想要这样的结果:

[josn2051@yahoo.com.us, john@yahoo.com.us, testtest321@gmail.com, chorm3636@test.test.test.com]

我的模式或代码有什么问题?

为什么结果是多个列表包含额外的comgmailtest

谢谢你解决了我的疑惑!

【问题讨论】:

标签: python regex


【解决方案1】:

第一条规则是你永远不要使用正则表达式来解析 HTML,这是不可能的!

一旦你有一个文本块你想验证为是和电子邮件地址,你谷歌并在 StackOverlfow 上找到 2-5 个非常好的正则表达式。正则表达式不是特定于 python 的。

第三,你要找一份更好的工作,试图从网站上删除电子邮件地址不是一件容易的事,这里的每个人都讨厌那些向我们发送垃圾邮件的人。

【讨论】:

  • 感谢您的指导,如果我需要知道如何防御垃圾邮件机器人,学习如何解析是学习防御的方法之一。进攻和防守总是一枚硬币的两个方面。
【解决方案2】:

制作内组non-capturing:

([\w\-\.]+@(?:\w[\w\-]+\.)+[\w\-]+)
            ^^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2020-07-14
    • 1970-01-01
    • 2012-01-25
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多