Regex, um NUMBER nur von String zu erhalten

71

Ich erhalte "7+" oder "5+" oder "+5" aus XML und möchte mit Regex nur die Zahl aus der Zeichenfolge extrahieren. zB Regex.Match () Funktion

        stringThatHaveCharacters = stringThatHaveCharacters.Trim();
        Match m = Regex.Match(stringThatHaveCharacters, "WHAT I USE HERE");
        int number = Convert.ToInt32(m.Value);
        return number;
Muhammad Adnan
quelle

Antworten:

81

\d+

\drepräsentiert eine beliebige Ziffer +für eine oder mehrere. Wenn Sie auch negative Zahlen abfangen möchten, können Sie verwenden -?\d+.

Beachten Sie, dass es als Zeichenfolge in C # als "\\d+"oder dargestellt werden sollte@"\d+"

Kobi
quelle
130

Die obigen Antworten sind großartig. Wenn Sie alle Zahlen aus einer Zeichenfolge analysieren müssen, die nicht aufeinanderfolgend sind, kann Folgendes hilfreich sein:

string input = "1-205-330-2342";
string result = Regex.Replace(input, @"[^\d]", "");
Console.WriteLine(result); // >> 12053302342
Bluetoft
quelle
Regex.Replace (Eingabe, @ "\ D", "");
TNT
5

Entweder [0-9]oder \d1 sollte ausreichen, wenn Sie nur eine einzige Ziffer benötigen. Fügen +Sie hinzu, wenn Sie mehr benötigen.


1 Die Semantik unterscheidet sich geringfügig, da sie \dmöglicherweise mit jeder Dezimalstelle in einem Skript übereinstimmt , das Dezimalstellen verwendet.

Joey
quelle
Bitte definieren Sie den genauen Regex, der in der Regex.Match-Funktion verwendet werden soll. Weil ich in Regex (SYNTAX) nicht gut bin
Muhammad Adnan
Für eine einzelne Ziffer benötigen Sie keinen regulären Ausdruck : char digit = s.First(Char.IsDigit);. Ich würde das zu meiner Antwort hinzufügen, aber ich glaube nicht, dass dies hier der Fall ist.
Kobi
@Kobi: Das würde allerdings noch eine explizite Iteration über den String erfordern. Die meisten Leute, die sich für Regex entscheiden, würden dies nicht tun wollen :-)
Joey