我愿做这样的事情:提取字符串 - 所有出现
我的字符串例子: “某事; 123:somethingelse; 156:somethingelse2; 589:somethingelse3”
我想从字符串示例中提取值的数组。这些值位于“;”之间和“:”:123,156,589
我都试过,但我不知道如何遍历获得所有出现:
string str = stringExample.Split(';', ':')[1];
string[i] arr = str;
谢谢你对我的帮助。
我愿做这样的事情:提取字符串 - 所有出现
我的字符串例子: “某事; 123:somethingelse; 156:somethingelse2; 589:somethingelse3”
我想从字符串示例中提取值的数组。这些值位于“;”之间和“:”:123,156,589
我都试过,但我不知道如何遍历获得所有出现:
string str = stringExample.Split(';', ':')[1];
string[i] arr = str;
谢谢你对我的帮助。
所以,你要提取所有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
LINQ是你的朋友在这里,像这样的事:
str.Split(';').Select(s => s.Split(':')[0]).Skip(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();
这听起来像是正则表达式的完美案例。
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();
我会命名组工作:
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;
}
'Split'返回*数组*;所以你可以随意循环,例如'foreach(stringExample.Split(';',':')){...}中的字符串项' –
问题在于你在分割之后指定索引。删除'[1]',然后'str'将是'string []' –