2016-07-20 135 views
-2

我愿做这样的事情:提取字符串 - 所有出现

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

我想从字符串示例中提取值的数组。这些值位于“;”之间和“:”:123,156,589

我都试过,但我不知道如何遍历获得所有出现:

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

谢谢你对我的帮助。

+0

'Split'返回*数组*;所以你可以随意循环,例如'foreach(stringExample.Split(';',':')){...}中的字符串项' –

+0

问题在于你在分割之后指定索引。删除'[1]',然后'str'将是'string []' –

回答

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 
2

LINQ是你的朋友在这里,像这样的事:

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