0

さまざまな形式の電子メール アドレスのリストがあります。

john@smith.com
Angie <angie@aol.com>
"Mark Jones" <mark@jones.com>

それぞれからメール部分だけを切り取ろうとしています。例:angie@aol.comリストの 2 番目のアイテムのみが必要です。つまり、存在しない場合は<andまたはすべてに一致する間にすべてを一致させたいと考えています。>

これは2つのステップで実行できることを知っています:

  1. でキャプチャし(?<=\<)(.*)(?=\>)ます。
  2. 一致しない場合は、テキスト全体を使用してください。

しかし今、私は疑問に思っています: 両方のステップを 1 つの単純な正規表現に減らすことはできますか?

4

3 に答える 3

1

どうですか:

(?<=\<).*(?=\>)|^[^<]*$

^[^>]*$は文字列全体に一致しますが、<. そして、それ|はあなたが持っていたものと OR 演算 ( ) されます。

説明:

^- 文字列の開始
[^<]-<文字以外
[^<]*- 0 個以上の<文字以外
$- 文字列の終わり

于 2013-10-22T21:55:08.350 に答える
0

可能ですが、現在のロジックはおそらくもっと単純です。これが私が思いついたものです。メールアドレスは常に最初のキャプチャグループにあります。

^(?:.*<|)(.*?)(?:>|$)

例: http://rubular.com/r/8tKHaYYY4T

于 2013-10-22T21:46:00.583 に答える