Python 正则表达式提取特定部分非贪婪
我不熟悉Python 2.7。使用正则表达式,我试图从文本文件中提取输入行中的电子邮件。我使用的是非贪婪方法,因为电子邮件在同一行中重复了2次。这是我的密码:Python 正则表达式提取特定部分非贪婪,python,regex,python-2.7,non-greedy,Python,Regex,Python 2.7,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) 然而,这是我得到的,而不仅仅是电子邮件地址: ['
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-mediant.com']
试试这个
re.findall('mailto:(\S+@\S+?\。\S+\”,str))
它应该会给你一些
['secretary@abc-mediant.com']
\S
表示不是空格。“
和
不是空格
您应该使用
mailto:([^@]+@[^”]+)
作为正则表达式(引用形式:'mailto:([^@]+@[^”]+)
)。这将把电子邮件地址放在第一个捕获组中。\S
表示没有空格“
和
不是空格
您应该使用
mailto:([^@]+@[^”]+
作为正则表达式(引用形式:'mailto:([^@]+@[^”]+')
)。这将把电子邮件地址放在第一个捕获组中。如果您解析一个简单的文件,其中包含电子邮件地址的锚,并且始终使用相同的语法(如用双引号括住属性),您可以使用:
for line in f_hand:
print re.findall(r'href="mailto:([^"@]+@[^"]+)">\1</a>', line)
对于f_-hand中的行:
打印关于findall的文件(r'href=“mailto:([^“@]+@[^“]+)”>\1',行)
(re.findall
仅返回捕获组。\1
表示第一个捕获组的内容。)
如果文件是更复杂的html文件,请使用解析器,提取链接并对其进行过滤。
或者最终使用XPath,例如:
子字符串之后(//a/@href[以(,“mailto:”)],“mailto:”)
,如果您解析一个带有电子邮件地址锚的简单文件,并且始终使用相同的语法(类似于用双引号括起属性),可以使用:
for line in f_hand:
print re.findall(r'href="mailto:([^"@]+@[^"]+)">\1</a>', line)
对于f_-hand中的行:
打印关于findall的文件(r'href=“mailto:([^“@]+@[^“]+)”>\1',行)
(re.findall
仅返回捕获组。\1
表示第一个捕获组的内容。)
如果文件是更复杂的html文件,请使用解析器,提取链接并对其进行过滤。
或者最终使用XPath,例如:
子字符串(//a/@href[以(,“mailto:”)开头),“mailto:”
\S接受电子邮件地址中许多无效的字符。请尝试
[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\\.[a-zA-Z0-9-_.]+
(假设您没有尝试支持Unicode——因为您的输入是一个“文本文件”,所以您似乎不支持Unicode)
这需要在电子邮件地址的服务器部分使用“.”,匹配将在电子邮件地址中无效的第一个字符处停止。\S接受电子邮件地址中无效的许多字符。请尝试正则表达式
[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\\.[a-zA-Z0-9-_.]+
(假设您没有尝试支持Unicode——因为您的输入是一个“文本文件”,所以您似乎不支持Unicode)
这将要求在电子邮件地址的服务器部分使用“.”,您的匹配将在电子邮件地址中无效的第一个字符处停止。这是电子邮件地址的格式- 请记住,您需要的正则表达式是-
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)
另外,我通过谷歌搜索“email address regex”并点击第一个站点获得了电子邮件地址的regex-这是电子邮件地址的格式- 请记住,您需要的正则表达式是-
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)
另外,我通过谷歌搜索“email address regex”并点击第一个站点获得了电子邮件地址的正则表达式-
[^@]+@\S+?
-显式匹配非@
。不要尝试用正则表达式解析HTML。使用HTML解析器。这将有助于查看您尝试解析的文本示例以及预期的输出。嗨,Brendan!这是文本:[^@]+@\S+?
-显式匹配非@
。不要尝试用正则表达式解析HTML。使用HTML解析器。这将有助于查看您尝试解析的文本示例以及预期的输出。嗨,Brendan!这是文本:嗨,Saurabh!这是我正在做的立即获取:['mailto:email@email.com“']我怎样才能删除mailto和”标志?嗨,Saurabh!这就是我现在得到的:['mailto:email@email.com“']如何删除邮件收件人和”标志?