我正在尝试从
这样的字符串中提取电子邮件地址 John Smith <jsmith@email.com>
我只需要&lt;中的电子邮件地址。 &GT;括号中。
这是我到目前为止所尝试的内容,但我对正则表达式并不是很好,它似乎没有用,有人可以帮忙吗?
import re
sender = str(message.sender)
p = re.search(r"\<(\w+)\>", sender)
logging.info(p.group(1))
答案 0 :(得分:1)
你可以试试这个:
import re
s = "John Smith <jsmith@email.com>"
email = re.findall('<(.*?)>', s)[0]
输出:
'jsmith@email.com'
或者,更具体的电子邮件解决方案:
email = re.findall('(?<=\<)\w+@[a-zA-Z]+\.[a-z]+(?=\>)', s)[0]
输出:
'jsmith@email.com'
答案 1 :(得分:0)
目前你的正则表达式是:"\<(\w+)\>"
您实际上不需要转义<>
,因此它变为:"<(\w+)>"
\w
匹配字母,数字和欠打'_'
。在电子邮件地址中还有其他字符。
您有两种选择:只需使用<>
等正则表达式接受"<(.*)>"
内的任何内容,或者实际解析电子邮件地址。
一个简单的正则表达式是"<\S+@\S+>"
(非空白字符后跟@
后跟非空白字符。
限制使用更常用的字符,我们可以写:"<[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+>
这仍然允许某些非法的电子邮件地址,因为我保持相当简单。
答案 2 :(得分:0)
使用否定字符集:
import re
s = "John Smith <jsmith@email.com>"
email = re.findall('<([^>])>', s)[0]
匹配任何不是>
字符的东西,所以角括号中的所有内容都是。