7

我想在< >

例如。

输入字符串:"abc" <abc@gmail.com>; "pqr" <pqr@gmail.com>;

输出字符串:abc@gmail.com;pqr@gmail.com

4

6 回答 6

9

没有正则表达式,你可以使用这个:

public static string GetStringBetweenCharacters(string input, char charFrom, char charTo)
    {
        int posFrom = input.IndexOf(charFrom);
        if (posFrom != -1) //if found char
        {
            int posTo = input.IndexOf(charTo, posFrom + 1);
            if (posTo != -1) //if found char
            {
                return input.Substring(posFrom + 1, posTo - posFrom - 1);
            }
        }

        return string.Empty;
    }

进而:

GetStringBetweenCharacters("\"abc\" <abc@gmail.com>;", '<', '>')

你会得到

abc@gmail.com

于 2017-01-17T11:34:56.810 回答
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));

(?<=<) 是后面的非捕获外观,因此 < 是搜索的一部分,但不包含在输出中

捕获组不超过一次或多次

也可以使用非捕获组 @"(?:<)([^>]+)(?:>)"

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 回答