REGEX提取特定部分非贪心

时间:2016-09-23 16:35:51

标签: python regex python-2.7 non-greedy

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

Caused by: java.sql.SQLIntegrityConstraintViolationException: 
ORA-01400: 
cannot insert NULL into ("SCHEMA"."TABLE"."ID")

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

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'] 中使用什么来获取电子邮件?

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

\S表示不是空格。 ">不是空格。

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

答案 2 :(得分:1)

如果您使用电子邮件地址的锚点解析一个简单文件,并且语法总是相同(如双引号括起属性),您可以使用:

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

re.findall仅返回捕获组。\1代表第一个捕获组的内容。)

如果文件是一个更复杂的html文件,请使用解析器,提取链接并过滤它们。
或者最终使用XPath,例如:
substring-after(//a/@href[starts-with(., "mailto:")], "mailto:")

答案 3 :(得分:1)

\ S接受许多在电子邮件地址中无效的字符。尝试正则表达式

[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\\.[a-zA-Z0-9-_.]+

(假设你不是想支持Unicode - 似乎你不是因为你的输入是&#34;文本文件&#34;)。

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

答案 4 :(得分:0)

这是电子邮件地址的格式 - https://tools.ietf.org/html/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。 - 我通过Google搜索“电子邮件地址正则表达式”并点击第一个网站获得了电子邮件地址的正则表达式 - http://emailregex.com/