REGEX 提取特定部分非贪婪

REGEX extracting specific part non greedy

我是 Python 2.7 的新手。使用正则表达式,我试图从文本文件中提取来自输入行的电子邮件。我正在使用非贪婪方法,因为电子邮件在同一行中重复了 2 次。这是我的代码:

import re
f_hand = open('mail.txt')
for line in f_hand:
    line.rstrip()
    if re.findall('\S+@\S+?',line): print re.findall('\S+@\S+?',line)

然而这是我得到的,而不仅仅是电子邮件地址:

['href="mailto:secretary@abc-mediaent.com">sercetary@a']

我应该在 re.findall 中使用什么来发送电子邮件?

试试这个 re.findall('mailto:(\S+@\S+?\.\S+)\"',str))

它应该给你类似的东西 ['secretary@abc-mediaent.com']

\S 表示不是 space。 "> 不是 space。

您应该使用 mailto:([^@]+@[^"]+) 作为正则表达式(引用形式:'mailto:([^@]+@[^"]+)')。这会将电子邮件地址放在第一个捕获组中。

如果您解析一个简单的文件,其中包含电子邮件地址的锚点和始终相同的语法(例如用双引号括起属性),您可以使用:

for line in f_hand: 
    print re.findall(r'href="mailto:([^"@]+@[^"]+)"></a>', line)

(re.findall returns只有捕获组。</code>代表第一个捕获组的内容。)</em></p> <p>如果文件是一个更复杂的 html 文件,使用解析器,提取链接并过滤它们。<br>或者最终使用 XPath,例如:<br><code>substring-after(//a/@href[starts-with(., "mailto:")], "mailto:")

\S 接受电子邮件地址中的许多无效字符。试试

的正则表达式
[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z0-9-_.]+

(假设您没有尝试支持 Unicode——看起来您没有,因为您的输入是 "text file")。

这需要一个“.”在电子邮件地址的服务器部分,您的匹配将在电子邮件地址中的第一个无效字符处停止。

这是电子邮件地址的格式 - https://www.rfc-editor.org/rfc/rfc5322#section-3.4.1

请记住,您需要的正则表达式是 - r"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)"(无需依赖电子邮件地址周围的文本即可工作。)

下面几行代码-

html_str = r'<a href="mailto:sachin.gokhale@indiacast.com">sachin.gokhale@indiacast.com</a>'
email_regex = r"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)"
print re.findall(email_regex, html_str)

产量 -

['sachin.gokhale@indiacast.com', 'sachin.gokhale@indiacast.com']

P.S。 - 我通过谷歌搜索“电子邮件地址正则表达式”并单击第一个站点获得了电子邮件地址的正则表达式 - http://emailregex.com/