提取2个字符之间的字符串 - 所有出现

时间:2016-07-20 13:18:34

标签: c# string split

我想做这样的事情:

我的字符串示例:“某事; 123:somethingelse; 156:somethingelse2; 589:somethingelse3”

我想从字符串示例中获取一个包含值的数组。这些值介于“;”之间和“:”:123,156,589

我试过这个,但我不知道如何迭代以获取所有事件:

string str = stringExample.Split(';', ':')[1];
string[i] arr = str;

感谢您帮助我。

5 个答案:

答案 0 :(得分:2)

LINQ是你的朋友,就像这样:

str.Split(';').Select(s => s.Split(':')[0]).Skip(1)

答案 1 :(得分:1)

您可以使用这样的正则表达式:

Regex r = new Regex(@";(\d+):");
string s = "something;123:somethingelse;156:somethingelse2;589:somethingelse3";
foreach(Match m in r.Matches(s))
    Console.WriteLine(m.Groups[1]);

;(\d+):匹配;:之间的一个或多个数字,而Groups[1]选择brackest内的内容,而不是数字。

输出:

123
156
589

要将这些字符串转换为数组,请使用:

string[] numberStrings = r.Matches(s).OfType<Match>()
                          .Select(m => m.Groups[1].Value)
                          .ToArray();

答案 2 :(得分:1)

我会使用命名组:

string stringExample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3";
Regex r = new Regex(";(?<digit>[0-9]+):");
foreach (Match item in r.Matches(stringExample))
{
    var digit = item.Groups["digit"].Value;
}

答案 3 :(得分:0)

所以你想要提取所有3个数字,你可以使用这种方法:

string stringExample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3";
string[] allTokens = stringExample.Split(';', ':'); // remove [1] since you want the whole array
string[] allNumbers = allTokens.Where(str => str.All(Char.IsDigit)).ToArray();

结果是:

allNumbers  {string[3]} string[]
            [0] "123"   string
            [1] "156"   string
            [2] "589"   string

答案 4 :(得分:0)

这听起来像正则表达式的完美案例。

    var sample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3";
    var regex = new Regex(@"(?<=;)(\d+)(?=:)");
    var matches = regex.Matches(sample);

    var array = matches.Cast<Match>().Select(m => m.Value).ToArray();