7

間のメールIDを抽出したい< >

例えば。

入力文字列:"abc" <abc@gmail.com>; "pqr" <pqr@gmail.com>;

出力文字列:abc@gmail.com;pqr@gmail.com

4

6 に答える 6

7
string input = @"""abc"" <abc@gmail.com>; ""pqr"" <pqr@gmail.com>;";
var output = String.Join(";", Regex.Matches(input, @"\<(.+?)\>")
                                    .Cast<Match>()
                                    .Select(m => m.Groups[1].Value));
于 2012-08-24T11:45:28.227 に答える
3

テスト済み

string input = "\"abc\" <abc@gmail.com>; \"pqr\" <pqr@gmail.com>;";
matchedValuesConcatenated = string.Join(";", 
                                Regex.Matches(input, @"(?<=<)([^>]+)(?=>)")
                                .Cast<Match>()
                                .Select(m => m.Value));

(?<=<) は非キャプチャ ルック ビハインドであるため、< は検索の一部ですが、出力には含まれません。

キャプチャ グループが 1 回以上ではない

非キャプチャ グループ @"(?:<)([^>]+)(?:>)" も使用できます

LB+1の答えも正解です。自分で答えを書くまで、それが正しいことに気づきませんでした。

于 2012-08-24T14:24:53.307 に答える
1

String.IndexOf(char, int)メソッドを使用して<、文字列内の特定のインデックス (たとえば、文字を最後に見つけたインデックス>、つまり、前の電子メール アドレスの末尾、または0最初のアドレスを探すとき)から検索を開始します。

次の文字が見つかるまで繰り返すループを作成し、<文字を見つけるたび<に次の>文字を探します。String.Substring(int, int)メソッドを使用して、開始位置と終了位置がわかっている電子メール アドレスを抽出します。

于 2012-08-24T11:37:00.087 に答える
0

次の正規表現といくつかの linq を使用できます。

        var regex = new Regex(@"\<(.*?)\>");
        var input= @"""abc"" <abc@gmail.com>;  ""pqr""  <pqr@gmail.com>";
        var matches = regex.Matches(input);
       var res = string.Join(";", matches.Cast<Match>().Select(x => x.Value.Replace("<","").Replace(">","")).ToArray());

<> ブラケットは後で削除されます。統合することもできますRegex

于 2012-08-24T11:49:25.450 に答える
-2
string str = "\"abc\" <abc@gmail.com>; \"pqr\" <pqr@gmail.com>;";
        string output = string.Empty;
        while (str != string.Empty)
        {
            output += str.Substring(str.IndexOf("<") + 1, str.IndexOf(">") -1);
            str = str.Substring(str.IndexOf(">") + 2, str.Length - str.IndexOf(">") - 2).Trim();
        }
于 2012-08-24T11:39:21.033 に答える