Ich probiere Dienste in C# aus, daher kann ich Werte mit Console.WriteLine (...) nicht debuggen. Deshalb weiß ich nicht, was in meiner variablen Zahl am Ende ist:C# Regex.Split() funktioniert nicht wie erwartet
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;
}
Was meinen Code tut? Ich gebe Ergänzungen & Subtraktionen, es macht die Operationen & das Ergebnis als Ganzzahl zurück.
Beispiel: Wenn ich eingeben "52-2 + 3" sollte es 53
Problem zurück: Mein Code gibt immer 99 Wich bedeutet das Parsing fehlgeschlagen. Nur für den Fall, versuchte ich int.TryParse("-2", out int n)
statt und es funktioniert gut.
Die Leitung nicht funktioniert:
List<string> numbers = new List<string>(valid_regex.Split(str).ToArray());
Mein Regexes ist in Ordnung, ich testete sie mit der Website regexstorm net
.
Meine Frage ist, warum meine Zeichenfolge nicht richtig unter Verwendung einer angenommenen gültigen Regex aufgeteilt wird? Regex.Split() nicht tun, was ich glaube, dass es tut? (Ich dachte, es würde meine Zeichenfolge in + Nummer oder -number Strings teilen
Randnotiz: Es ist in Ordnung, wenn nicht mit einem Zeichen beginnen. Wenn meine Zeichenfolge mit einer Nummer beginnt, wird am Ende für + "+" hinzufügen regex Zwecke.
Warum deklarieren Sie einen int innerhalb des Aufrufs von 'TryParse'? Willst du diesen Wert nicht bekommen? Haben Sie versucht, 'int n;' dann 'int.TryParse (number, out n)' zu deklarieren? – Rafalon
Ja, es funktioniert für meine anderen Methoden. Nur für den Fall, dass ich getestet habe und es immer noch 99 anzeigt. Es ist in Ordnung, es in der Funktion TryParse zu deklarieren. –
Konnten Sie diesen Code nicht in eine Konsolenanwendung importieren und dort debuggen? –