Python 正则表达式-提取内部单词<&燃气轮机;括号

Python 正则表达式-提取内部单词<&燃气轮机;括号,python,regex,Python,Regex,我正在尝试从字符串中提取电子邮件地址,如 John Smith 我只需要括号中的电子邮件地址 这是我到目前为止尝试过的,但我对正则表达式不是很好,而且它似乎不起作用,有人能帮我吗 import re sender = str(message.sender) p = re.search(r"\<(\w+)\>", sender) logging.info(p.group(1)) 重新导入 sender=str(message.sender) p=重新搜索(r“\”,发件人) 日志记录

我正在尝试从字符串中提取电子邮件地址,如

John Smith

我只需要<>括号中的电子邮件地址

这是我到目前为止尝试过的,但我对正则表达式不是很好,而且它似乎不起作用,有人能帮我吗

import re
sender = str(message.sender)
p = re.search(r"\<(\w+)\>", sender)
logging.info(p.group(1))
重新导入
sender=str(message.sender)
p=重新搜索(r“\”,发件人)
日志记录信息(p.group(1))
您可以尝试以下方法:

import re
s = "John Smith <jsmith@email.com>"   
email = re.findall('<(.*?)>', s)[0]
或者,更具体的电子邮件解决方案:

email = re.findall('(?<=\<)\w+@[a-zA-Z]+\.[a-z]+(?=\>)', s)[0]

当前您的正则表达式是:
“\”
您实际上不需要转义
,因此它变成:
“”
\w
匹配字母、数字和下面的工作
'
。电子邮件地址中还有其他字符

您有两种选择:要么接受
中带有类似于
的正则表达式的任何内容,要么实际解析电子邮件地址

一个简单的正则表达式是
(非空白字符后跟
@
,后跟非空白字符)


限制我们使用更常用的字符,我们可以这样写:
这仍然允许使用某些非法电子邮件地址,因为我将其保持得相当简单。

使用负数字符集:

import re
s = "John Smith <jsmith@email.com>"   
email = re.findall('<([^>])>', s)[0]
重新导入
s=“约翰·史密斯”
email=re.findall(']>',s[0]
它匹配任何非
字符的内容,因此所有内容都在角括号中。

您可以使用:
re.search(r“]+)>”,sender)
试试这个/]*)/如果您只想要电子邮件(而不是
),您可以将@anubhava的regex修改为
(?)
'jsmith@email.com'
import re
s = "John Smith <jsmith@email.com>"   
email = re.findall('<([^>])>', s)[0]