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