2017-05-31 62 views
-1

得到的数字我有一个输入字符串象下面这样:从字符串C#

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

你只需要字符串'“/ 123456 /”'这部分? – Taysumi

+0

不确定正则表达式,但如果格式保证为显示,您可能会考虑'String.Split',并只查看最后两个元素。 – AlainD

+0

试试这个'\ w +(?= \ d \ /)\ w'。 –

回答

5

我建议匹配,不分裂

string source = @"/myWS/api/Application/IsCarAvailable/123456/2017"; 

    string[] numbers = Regex 
    .Matches(source, "[0-9]+") 
    .OfType<Match>() 
    .Select(match => match.Value) 
    .ToArray(); 

请注意\d+在.net意味着任何 unicode的位数(例如:波斯的:۰۱۲۳۴۵۶۷۸۹):这就是为什么我把[0-9]+模式(如果\d+模式是可取的,则为RegexOptions.ECMAScript)。

+0

你能给出一个快速评论关于匹配和分裂的区别? –

+1

@Ctrl_Alt_Defeat:匹配:正在提取'[0-9] +'(2项);拆分:使用'\ D +'分隔符拆分现有的字符串:'[\ D +] 123456 [\ D +] 2017'并且您有** 3 **项:*空*,'123456','2017' –

+0

感谢您的解释 –

0

如果字符串总是在相同的格式,这会工作:

string numbers = input.Split('/')[input.Split('/').Length - 2]; 
0

我想这是因为分裂法“分裂”的匹配表达式的字符串。所以空串是第一场比赛之前的部分。 任何你不会使用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}"); 

希望有帮助。问候!