Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式提取特定部分非贪婪_Python_Regex_Python 2.7_Non Greedy - Fatal编程技术网

Python 正则表达式提取特定部分非贪婪

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) 然而,这是我得到的,而不仅仅是电子邮件地址: ['

我不熟悉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-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“']如何删除邮件收件人和”标志?