2017-07-07 42 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();分裂後,您可以擺脫空的字符串。