使用Regex从Python字符串中获取电子邮件地址



**注意:我已经在Stack Overflow上大量研究了这个问题,还没有找到解决方案!我无法将其他答案应用到我的问题中,所以我需要一些帮助。* *

挑战:我想从一个字符串得到一个电子邮件地址,但我有麻烦的电子邮件地址只与Regex。

我想从HTML的电子邮件地址是:

query-e1h1.net

HTML为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">rn<html xmlns="http://www.w3.org/1999/xhtml">rn<html>rn<head></head>rn<body>rn<a name="top"></a>Back to Category Index</a></p>rn<p>-----------------------------------<br/></p>rnrn67)<a name="e1h1" id="e1h1"></a> Summary: Solar Eclipse 2024 Travelrn<br/><br/>rn<p>Name: laure gem wilsonrnRoadtrippersrn</p>Category: Travelrn<br/><br/>rnEmail: <a href="mailto:query-e1h1@email.net">query-e1h1@email.net</a>rn<br/><br/>rnOutlet: Roadtrip<br/><br/>rnDeadline: 7:00 PM EST - 8 Julyrn<br/><br/>rn<p>rnQuery: rn<br/><br/>rnHi, I am on assignment to write a feature about planning a road<br/>trip to experience the Solar Eclipse 2024, including path of<br/>totality, advice about viewing, and recommendations for when and<br/>where to book accommodations, thanks!<br/>rn</p>rn<p>rnRequirements: rn<br /><br />rnMust be domestic USA<br/>rn</p>rn<p><a href="#top">Back to Top</a> <a href="#Travel">Back to Category Index</a></p>rn<p>-----------------------------------<br/>

我的Python代码是:

Query_Email = re.findall(r'Email:.+', msg_content[index_counter])

这回报:

<a href="mailto:query-e1h1@email.net">query-e1h1@email.net</a>
Authority Magazine<br/><br/>

您可以在mailto:部分内获得电子邮件,并延迟赶上第一个">:

mailto:(.*?)">

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

这应该捕获组内的电子邮件。

如果您想从任何文本中提取电子邮件地址,邮件正则表达式是最受欢迎的regex之一,这样的正则表达式是很容易找到,只是谷歌邮件正则表达式,得到你的答案。我使用第一个搜索结果并稍微修改(我已经把b-词边界而不是^$-文本边界):

b[a-zA-Z0-9.! #$%&'*+/=? ^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*b

这是正则表达式的演示。

,

如果你想从HTML中提取信息,不要使用REGEX,因为:)

您可以使用Email:前缀并使用捕获组:

bEmail:s*<as[^<>]*bhref="mailto:([^"]+)"

  • nEmail:s*匹配Email:,后跟可选的空白字符
  • <as匹配<a后加空白字符
  • [^<>]*可选地匹配<>以外的任何字符
  • bhref="mailto:匹配字边界
  • ([^"]+)"捕获组1中双引号之间的值

Regex演示

import re
pattern = r"bEmail:s*<as[^<>]*bhref="mailto:([^"]+)""
s = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">rn<html xmlns="http://www.w3.org/1999/xhtml">rn<html>rn<head></head>rn<body>rn<a name="top"></a>Back to Category Index</a></p>rn<p>-----------------------------------<br/></p>rnrn67)<a name="e1h1" id="e1h1"></a> Summary: Solar Eclipse 2024 Travelrn<br/><br/>rn<p>Name: laure gem wilsonrnRoadtrippersrn</p>Category: Travelrn<br/><br/>rnEmail: <a href="mailto:query-e1h1@email.net">query-e1h1@email.net</a>rn<br/><br/>rnOutlet: Roadtrip<br/><br/>rnDeadline: 7:00 PM EST - 8 Julyrn<br/><br/>rn<p>rnQuery: rn<br/><br/>rnHi, I am on assignment to write a feature about planning a road<br/>trip to experience the Solar Eclipse 2024, including path of<br/>totality, advice about viewing, and recommendations for when and<br/>where to book accommodations, thanks!<br/>rn</p>rn<p>rnRequirements: rn<br /><br />rnMust be domestic USA<br/>rn</p>rn<p><a href="#top">Back to Top</a> <a href="#Travel">Back to Category Index</a></p>rn<p>-----------------------------------<br/>"""
print(re.findall(pattern, s))

输出
['query-e1h1@email.net']

注意如果你有一个dom解析器,那将是一个更好的选择。

相关内容

  • 没有找到相关文章

最新更新