3

私はこのような文字列を持っています:

Alex Jatt, (alex.jatt@domain.com)

amd私は次のように正規表現を使用してメールアドレスのみを抽出しようとしています:

p = re.search('\((.*?)\)', c)

ただし、print pコマンドは出力します(alex.jatt@domain.com)

括弧を取り除くためにこの正規表現を変更するにはどうすればよいですか?

4

5 に答える 5

3

解決策なしregex

>>> strs="Alex Jatt, (alex.jatt@domain.com)"
>>> strs.split(',')[1].strip().strip("()")
'alex.jatt@domain.com'
于 2012-08-15T14:59:47.163 に答える
3

re.search一致したグループを正規表現の一致から引き出すことができます。あなたの場合、p.group(1)最初の括弧で囲まれた一致を抽出するために使用する必要があります。これは、正規表現の電子メールである必要があります。

于 2012-08-15T14:59:48.530 に答える
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'
于 2012-08-15T15:06:28.097 に答える
2

かっこがそこにあることを確認するために、先読みと後ろ向きを使用しますが、それらをキャプチャできないようにします。

p = re.search('(?<=\().*?(?=\))', c)

または、正規表現全体ではなく、キャプチャグループにアクセスすることもできます。

p = re.search('\((.*?)\)', c).group(1)

どちらの方法でも機能します。

于 2012-08-15T14:58:23.257 に答える
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
于 2012-08-15T14:59:19.513 に答える