私はこのような文字列を持っています:
Alex Jatt, (alex.jatt@domain.com)
amd私は次のように正規表現を使用してメールアドレスのみを抽出しようとしています:
p = re.search('\((.*?)\)', c)
ただし、print pコマンドは出力します(alex.jatt@domain.com)
括弧を取り除くためにこの正規表現を変更するにはどうすればよいですか?
解決策なしregex
:
>>> strs="Alex Jatt, (alex.jatt@domain.com)"
>>> strs.split(',')[1].strip().strip("()")
'alex.jatt@domain.com'
re.search
一致したグループを正規表現の一致から引き出すことができます。あなたの場合、p.group(1)
最初の括弧で囲まれた一致を抽出するために使用する必要があります。これは、正規表現の電子メールである必要があります。
参加することもできます。
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'
かっこがそこにあることを確認するために、先読みと後ろ向きを使用しますが、それらをキャプチャできないようにします。
p = re.search('(?<=\().*?(?=\))', c)
または、正規表現全体ではなく、キャプチャグループにアクセスすることもできます。
p = re.search('\((.*?)\)', c).group(1)
どちらの方法でも機能します。
ここに貼り付ける前にコードを変更していると思います。
私が行った場合:
>>> 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