python中两个字符串之间的模式

2024-04-19 15:07:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,格式如下:

文斯的产品内反馈(aaa@bbb.com)…来自Corey Zimmerman Anderson的产品反馈(邮箱:ccc@ddd.com)…安德里亚·伊巴拉的产品反馈(邮箱:eee@fff.com)你知道吗

我需要从上面的字符串中提取电子邮件ID。“In product feedback from”将是静态的,电子邮件ID将始终位于括号内,但两者之间的名称将有所不同。你知道吗


Tags: 字符串comid产品电子邮件格式anderson邮箱
3条回答

试试这个

import re
str = 'In-product feedback from Vince (aaa@bbb.com)'
regex = '(In-product feedback from) ([a-zA-Z ]+) \(([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)\)'
phrase= re.match(regex, str)
print phrase.group(1) # In-product feedback from
print phrase.group(2) # Vince 
print phrase.group(3) # aaa@bbb.com

由于您拥有的文本几乎是静态的,并且名称可能不包含(),因此您可以使用非regex方法:

s = "In-product feedback from Vince (aaa@bbb.com)"
s_clean = s.rsplit('(')[1].strip(')')
print(s_clean)
# 'aaa@bbb.com'

或者使用regex:

import re

s = "In-product feedback from Vince (aaa@bbb.com)"
s_clean = re.findall(r'\((.*?)\)', s)[0]
print(s_clean)
# 'aaa@bbb.com'

如果多次出现,您将得到所有电子邮件的列表:

s = "In-product feedback from Vince (aaa@bbb.com)...In-product feedback from Corey Zimmerman Anderson (ccc@ddd.com)...In-product feedback from Andrea Ibarra (eee@fff.com)"
s_clean = re.findall(r'\((.*?)\)', s)
print(s_clean)
# ['aaa@bbb.com', 'ccc@ddd.com', 'eee@fff.com']

使用以下代码:

import re
r = re.findall(r"\(([^)]+)\)", s)
print(r)

你的弦在哪里。你知道吗

相关问题 更多 >