我有这样的字符串:
Alex Jatt, (alex.jatt@domain.com)
amd我正在尝试使用正则表达式提取电子邮件地址,如下所示:
p = re.search('\((.*?)\)', c)
但 print p命令打印(alex.jatt@domain.com)
如何修改此正则表达式以摆脱括号?
答案 0 :(得分:3)
没有regex
解决方案:
>>> strs="Alex Jatt, (alex.jatt@domain.com)"
>>> strs.split(',')[1].strip().strip("()")
'alex.jatt@domain.com'
答案 1 :(得分:3)
re.search
允许您从正则表达式匹配中提取匹配的组。在您的情况下,您可能希望使用p.group(1)
来提取第一个带括号的匹配项,该匹配项应该是您所使用的正则表达式中的电子邮件。
答案 2 :(得分:3)
通过加入你也可以做到..
a= ''.join(c for c in a if c not in '()')
或使用正则表达式。
In[20]: import re
In[21]: name= re.sub('[()]', '', a)
In [22]: name
Out[22]: 'Alex Jatt, alex.jatt@domain.com'
答案 3 :(得分:2)
使用前瞻和后视来确保括号在那里,但是为了防止你捕获它们。
p = re.search('(?<=\().*?(?=\))', c)
或者你可以只访问捕获组而不是整个正则表达式。
p = re.search('\((.*?)\)', c).group(1)
无论哪种方式都可行。
答案 4 :(得分:0)
我认为你在修改代码之前一直在修改代码。
如果我这样做:
>>> import re
>>> c="Alex Jatt, (alex.jatt@domain.com)"
>>> p = re.search('\((.*?)\)', c)
>>> print p
<_sre.SRE_Match object at 0x10bd68af8>
您想要查看群组:
>>> import re
>>> c="Alex Jatt, (alex.jatt@domain.com)"
>>> p = re.search('\((.*?)\)', c)
>>> print p.groups()[0]
alex.jatt@domain.com