-1

次の行を検討してください。

  1. 私の電子メール ID は xyz@mail.com です

  2. 私のメール ID xyz@mail.com をメモしておいてください。メールを送信できます。

これら 2 つの文から、メール ID のみを抽出する必要があります。メール ID は行のどこにでも存在できます。次の正規表現を使用しました: \s.+@{1}.+.com

しかし、上記の 2 つの文については、次のように一致します。これは私の期待した結果ではありません。:

  1. メール ID は xyz@mail.com です

  2. 私のメール ID、xyz@mail.com に注意してください。

誰でもこれについて私を助けることができますか?

前もって感謝します。

4

4 に答える 4

1

簡単な例

(.*)(\s)(.+@{1}.+.com)

そのため、最初の部分 1(.*)と 2(\s)は、検索された電子メール 3 の前の最後のスペースの出現に移動します(.+@{1}.+.com)

テスト:

Notepad++ に置き換える

検索対象: (.*)(\s)(.+@{1}.+.com)

置換: +\1+\2+\3+

入力:私のメール ID は xyz@mail.com です

結果: +私のメールIDは+ +xyz@mail.com+

\3このようにして、メールが含まれていることがわかります

短所:

電子メールが行の最初の単語として配置されている場合、この式は機能しません

電子メールの前に空白以外の何かがある場合、この記号は電子メール アドレスに含まれます (これは、asker 電子メールの正規表現設計の結果です)。

さまざまなケースで遊んで、自分に合った最適なソリューションを見つけてください。

于 2013-10-27T09:18:50.350 に答える
1

正規表現に従って、ほぼすべての種類のメール アドレスに一致するようにしてください

\b[-0-9a-zA-Z.+_]+@[-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,4}\b

説明付きのregex101 デモを確認してください

于 2013-10-27T09:16:26.447 に答える
0

次の正規表現を使用できます。

\<[^ ]+@{1}.+.com

あなたの提案の問題は、正規表現が貪欲であることです。.+見つけることができる最大の一致をキャッチします。これは、 までの行全体.comです。

単語の先頭に\<一致し (電子メール アドレスに引用符が含まれている場合に必要)、[^ ]+空白以外のすべてに一致します。つまり、正規表現の貪欲な動作を防ぎます。

実際に使用している (指定しなかった) 言語によっては、表記が少し異なる (または利用できない) 場合があることに注意してください。

于 2013-10-27T09:07:27.270 に答える
0

http://www.regular-expressions.info/email.htmlから RFC 5322 の「実用的な」実装を使用する

>>> import re
>>> email = re.compile("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
>>> email.search('My email id is xyz@mail.com').group(0)
'xyz@mail.com'
>>> email.search('Note my mail id, xyz@mail.com, so you can send a mail').group(0)
'xyz@mail.com'
于 2013-10-27T09:00:36.220 に答える