0

メールアドレスのカンマ区切りのリストを分割したいのですが、メールアドレスがある場合は、それらのメールアドレス内にユーザーフレンドリーな名前を取得したいと考えています

今、私はこの正規表現を使用します:

(?<value>(?<normalized>.*?)\[.*?\])\s*,*\s*

この正規表現は入力文字列に対して機能します

"Eline[Elinek@yahoo.com],raymond[raymondc@yahoo.com]" 

次の 2 つのペアが返されます。

  1. 値「Eline[Elinek@yahoo.com]」正規化された「Eline」
  2. 値 'raymond[raymondc@yahoo.com]' 正規化された 'raymond'

しかし、入力文字列では機能しません

"Eline[Elinek@yahoo.com],piet@yahoo.com,raymond[raymondc@yahoo.com]" 

2 番目のケースでは、正規化された空の 3 つの電子メール アドレスが返されます。

4

2 に答える 2

1

2 番目の例で 3 つの一致が返されるのはなぜですか? 2 番目の電子メールには、パターンで必要な [...] がないため、このアドレスはさらに(?<normalized>.*?)3 番目の電子メール アドレスと照合されます。

代わりにこれを試してください:

(?<value>(?<normalized>[^,]*?)\[.*?\]|[^,\[\]]*)\s*,?\s*

ここでRegexrを参照してください

しかし、これは読めなくなってきています。最初にカンマで分割してから、結果の配列で作業しないのはなぜですか?

于 2013-02-08T11:23:02.830 に答える
0

このパターンを試すことができます:

(?<value>(?<normalized>[^\[,]*?)\[?[^,]*\]?)

あなたのパターンは入力文字列全体に一致することを意図していないようで、さまざまな一致を繰り返すつもりであるため、最後にコンマのパターンを追加する必要はありません。

[正規化されたグループは、またはのいずれでもない文字に一致します,。value のグループは[, を]オプションとし、その間の任意の文字に一致しますが、それらはコンマではありません。

于 2013-02-08T11:48:17.977 に答える