2017-05-30 7 views
0

私は電子メールの "+"記号の後に来る値を分離しようとしています。たとえば、「[email protected]」がある場合、「会社」という価値観を得たいと考えています。正規表現の上に+記号のようなものがあり、ここからどこに行くのかわかりません。それは、あなたの正規表現に問題が+はあなたのケースでは、「前の文字を1回以上繰り返す」という意味、特殊文字であるということであるpython regexで電子メールを分割する方法は?

re.findall(r'something+(.*?)@',st) 
+4

スプリットを使用しない理由は? – Aki003

+1

どの正規表現の文字列を試しましたか? –

+0

コードを表示してください。 – Xufox

答えて

2

+は、正規表現を定義するときに特殊文字(繰り返し演算子)のように機能します。あなたはそれをエスケープする\が必要:

>>> st = "[email protected]" 
>>> re.findall(r'something\+(.*?)@', st) 
["company"] 
1

になります。ここでは

は、私は再使用して書いたものですgと一度だけ一致し、(.*?)は、+と一致します。

ソリューションは\とそれに先行することにより、+を脱出することです:

>>> email = '[email protected]' 
>>> re.findall(r'something\+(.*?)@', email) 
['company'] 

はあなたが本当にここに正規表現を必要としない、と述べました。

あなたの目標は、あなたがしていますが、これは+第一と第一@間のすべてのテキストを取得することです:あなたはそこには+または@はません、そうだとすれば、このコードは、予期しない結果を与えること

>>> email = '[email protected]' 
>>> email[email.find('+')+1:email.find('@')] 
'company' 

注意おそらくこの周辺の小切手を追加したいでしょう(例えば、if '+' in email: ...)。

さらに、電子メールで実際に@などを引用することができます。したがって、これは100%RFCに準拠していません。しかし、前回、私は多くのMTAをチェックし、メールクライアントはそれをサポートしていませんでしたので、本当に心配する必要はありません。

+1

email.split( "@")[0] .split( "+")[ - 1] 'の間違いは何ですか? – ozgur

+0

@OzgurVatanseverのようなものはありません。私は 'find'をより読みやすくすることを検討しますが、それはまったく主観的な判断です。 – Carpetsmoker

+0

はいemail.split( "@")[0] .split( "+")[ - 1]は動作しますが、 – jake

関連する問題