我有一个输入字符串如下:
"/myWS/api/Application/IsCarAvailable/123456/2017"
这是我正在制作的Web API调用的结束。我需要从URL轻松提取123456。
我希望下面会有类似的东西
string[] numbers = Regex.Split(input, @"\D+");
但是,当我在数字上设置断点并运行代码时,它会显示一个包含3个元素的数组?
Element at [0] is ""
Element at [1] is 123456
Element at [2] is 2017
有谁知道为什么将空字符串作为第一个元素?
答案 0 :(得分:5)
我建议匹配,而不是拆分:
string source = @"/myWS/api/Application/IsCarAvailable/123456/2017";
string[] numbers = Regex
.Matches(source, "[0-9]+")
.OfType<Match>()
.Select(match => match.Value)
.ToArray();
请注意,.Net中的\d+
表示任何 unicode数字(例如波斯语:۰۱۲۳۴۵۶۷۸۹
):这就是我放{的原因{1}}模式(如果[0-9]+
模式更可取,则RegexOptions.ECMAScript
是替代方案。)
答案 1 :(得分:0)
如果您的字符串始终采用相同的格式,则可以使用:
string numbers = input.Split('/')[input.Split('/').Length - 2];
答案 2 :(得分:0)
我认为这是因为split方法在匹配的表达式中“拆分”了字符串。所以空字符串是第一个匹配之前的部分。
你有什么理由不使用Regex.Matches(input,"\\d+")
吗?
string numtest = "http://www.google.com/test/123456/7890";
var matchResult = Regex.Matches(numtest, "\\d+");
for (int i = 0; i < matchResult.Count; i++)
Console.WriteLine($"Element {i} is {matchResult[i].Value}");
希望有所帮助。此致!