提取2个字符之间的字符串-全部出现



我想做这样的事情:

我的字符串示例:"something;123:somethinggelse;156:something gelse2;589:something-gelse3"

我想得到一个数组,其中包含从字符串示例中提取的值。这些值介于";"one_answers":"之间:123156589

我已经尝试过了,但我不知道如何迭代以获得所有事件:

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

谢谢你帮我。

LINQ是你的朋友,这样做可以:

str.Split(';').Select(s => s.Split(':')[0]).Skip(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;
}

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

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]则选择最短的数字中的内容。

输出:

123
156
589

要将这些字符串放入数组,请使用:

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

因此,如果要提取所有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

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

    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();

相关内容

  • 没有找到相关文章

最新更新