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/
我是 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/