2017-07-07 167 views
0

我在C#中尝试使用服务,因此无法使用Console.WriteLine(...)调试值。这就是为什么我不知道什么是我的变量数结尾:C#Regex.Split()不能按预期工作

public int addAndSoustractNumberFromAString(string ustr) 
    { 
     int result = 0; 

     if(!string.IsNullOrEmpty(str)) 
     { 
      string str = ustr.Trim(); 

      //Regexes 
      System.Text.RegularExpressions.Regex valid_regex = new System.Text.RegularExpressions.Regex(@"[\+]\d+|[\-]\d+"); 
      System.Text.RegularExpressions.Regex invalid_regex = new System.Text.RegularExpressions.Regex(@"[a-zA-Z]"); 

      //Handling errors 
      if (invalid_regex.IsMatch(str) || !valid_regex.IsMatch(str) || !Char.IsDigit(str[str.Length - 1])) return 0; 
      if (Char.IsDigit(str[0])) str = "+" + str; 

      //Load all numbers in a string array 
      List<string> numbers = new List<string>(valid_regex.Split(str).ToArray()); 

      //Cast string numbers to int + result calculation 
      foreach (string number in numbers) { if (!int.TryParse(number, out int n)) return 99; result += n; } 
     } 

     return result; 
    } 

什么我的代码? 我输入增加&减法,它的操作&返回结果作为一个整数。

例如: 如果我输入 “52-2 + 3”,它应该返回53

问题: 我的代码总是返回99至极意味着解析失败。为了以防万一,我尝试了int.TryParse("-2", out int n),而且它工作正常。

不工作线:

List<string> numbers = new List<string>(valid_regex.Split(str).ToArray());

我的正则表达式都很好,我测试他们的网站regexstorm net

我的问题是,为什么我的字符串不能正确使用假定的有效正则表达式分割? Regex.Split()没有做我相信它做的事吗? (我想它会将我的字符串拆分为+数字或 - 数字字符串

附注:如果不以符号开头就可以了如果我的字符串以数字开头,它会在末尾添加“+”正则表达式的目的。

+0

为什么你要在'TryParse'的调用中声明一个int?你不想得到这个价值吗?你尝试过声明'int n;'然后'int.TryParse(number,out n)'? – Rafalon

+0

是的,它适用于我的其他方法。以防万一我测试过,它仍然显示99.可以在函数TryParse中声明它。 –

+0

难道你不能将这段代码放到控制台应用程序中并在那里调试吗? –

回答

1

您正则表达式是不分流()荷兰国际集团的Regex。

拆分()预计正则表达式定义的分隔符(即,在一个逗号或分号分割)。你的正则表达式描述的值。 ()而不是Split()的结果。

这似乎对我来说你的榜样工作:

List<string> numbers = valid_regex.Matches(str).Cast<Match>().Select(m => m.Value).ToList(); 

此外,LinqPad是一个奇妙的工具,原型代码段像这样的。

+0

它的工作!所以正如我所料,我误解了regex.split()函数。谢谢 ! –

0

([\+\-]\d+)替代您的正则表达式以示例"52-2+3"here为例。

还添加了.Where(x => !String.IsNullOrEmpty(x)).ToList();分裂后,您可以摆脱空的字符串。