2016-12-01 12 views
1

Ich versuche eine Regex für eine Zahl zu erstellen, der optional ein einzelnes '-' vorangestellt werden kann.Regex - Integer Zahl mit oder ohne ein einziges negatives Vorzeichen

Was ich bisher habe, ist: "-?\\d+"

Das Problem ist dies auch --123 Spiele (Doppel Backslash das '\' in C# zu entkommen). Ich möchte, dass es am Anfang nur ein einziges negatives Symbol geben kann.

+1

, die ein bisschen abhängt; Versuchen Sie, eine einzelne Zahl zu validieren oder alle Zahlen in einem Text zu extrahieren? – Rob

Antwort

0

Verwendung:

"(?:(?<!-)-)?\\d+" 

Erklärung

(?<!) 

Dies ist ein negative lookbehind assertion, die das sagt "darf nicht durch preceeeded werden". Es ist auch Null-Breite, also nichts verbraucht.

(?:) 

Dies ist ein non-capturing group da wir nicht erfassen wollen, was es übereinstimmt. Die Gruppe ist nur für Logik da, also ist das Capturen ausgeschaltet.

1

Wenn Sie bestätigen, dass eine Zeichenfolge eine Zahl und nichts anderes enthält, d. H. Dass eine Zeichenfolge einen optionalen Bindestrich gefolgt von einigen Ziffern enthält, können Sie das Muster am Anfang und am Ende der Zeichenfolge verankern, also ^-?\d+$.

Eine andere Möglichkeit zu überprüfen, dass die Zeichenfolge wie eine möglicherweise negative Zahl aussieht, besteht darin, sie als Ganzzahl mit den Methoden int.Parse oder int.TryParse zu analysieren. Wenn die Syntaxanalyse erfolgreich ist, haben Sie eine gültige Nummer, die dem gewünschten Muster entspricht. Zahlen, die für eine Ganzzahl zu groß (entweder positiv oder negativ) sind, können nicht analysiert werden. Größere Nummern können mit den Methoden long.Parse und long.TryParse akzeptiert werden. Es gibt auch eine BigInteger Klasse für beliebig große Zahlen.

0

Wie wäre es nur eine int in C# Parsen

int num; 
bool success = int.TryParse(val, out num); 

Leave regex, bis Sie es wirklich brauchen ...

Verwandte Themen