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()は私が信じていることをしていないのですか? (私は文字列を+数字または-number文字列に分割することにしました)
サイドノート:記号で始まらないといいです。文字列が数字で始まる場合、最後に "+"が追加されます正規表現の目的。
なぜTryParseへの呼び出しの中でintを宣言しますか?この値を取得したくないですか?あなたは 'int n;'と 'int.TryParse(number、out n)'を宣言しようとしましたか? – Rafalon
他の方法でもうまくいきます。私がテストしても、それはまだ99を示しています。それをTryParse関数の中で宣言するのは大丈夫です。 –
このコードをコンソールアプリケーションに入れてそこでデバッグできませんでしたか? –