从字符串中获取数字c#

时间:2017-05-31 13:45:11

标签: c# regex string

我有一个输入字符串如下:

"/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

有谁知道为什么将空字符串作为第一个元素?

3 个答案:

答案 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}");

希望有所帮助。此致!

相关问题