470 Stimmen

Suchen und Extrahieren einer Zahl aus einer Zeichenkette

Ich habe die Anforderung, eine in einer Zeichenkette enthaltene Zahl zu finden und zu extrahieren.

Zum Beispiel aus diesen Zeichenfolgen:

string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"

Wie kann ich das tun?

5voto

Erweiterungsmethode zum Abrufen aller positiv Zahlen, die in einer Zeichenkette enthalten sind:

    public static List<long> Numbers(this string str)
    {
        var nums = new List<long>();
        var start = -1;
        for (int i = 0; i < str.Length; i++)
        {
            if (start < 0 && Char.IsDigit(str[i]))
            {
                start = i;
            }
            else if (start >= 0 && !Char.IsDigit(str[i]))
            {
                nums.Add(long.Parse(str.Substring(start, i - start)));
                start = -1;
            }
        }
        if (start >= 0)
            nums.Add(long.Parse(str.Substring(start, str.Length - start)));
        return nums;
    }

Wenn Sie auch negative Zahlen verwenden möchten, ändern Sie einfach den Code, um das Minuszeichen ( - )

Angesichts dieser Eingabe:

"I was born in 1989, 27 years ago from now (2016)"

Das Ergebnis ist eine Nummernliste:

[1989, 27, 2016]

5voto

Simba Punkte 441

Ein interessanter Ansatz wird vorgestellt aquí von Ahmad Mageed, verwendet Regex und StringBuilder um die ganzen Zahlen in der Reihenfolge zu extrahieren, in der sie in der Zeichenkette erscheinen.

Ein Beispiel mit Regex.Split auf der Grundlage des Beitrags von Ahmad Mageed ist wie folgt:

var dateText = "MARCH-14-Tue";
string splitPattern = @"[^\d]";
string[] result = Regex.Split(dateText, splitPattern);
var finalresult = string.Join("", result.Where(e => !String.IsNullOrEmpty(e)));
int DayDateInt = 0;

int.TryParse(finalresult, out DayDateInt);

3voto

Manoj Gupta Punkte 31
  string verificationCode ="dmdsnjds5344gfgk65585";
            string code = "";
            Regex r1 = new Regex("\\d+");
          Match m1 = r1.Match(verificationCode);
           while (m1.Success)
            {
                code += m1.Value;
                m1 = m1.NextMatch();
            }

3voto

mwilly Punkte 31

Machen Sie die Umkehrung einer der Antworten auf diese Frage: Wie entfernt man Zahlen aus einer Zeichenkette mit Regex.Replace?

// Pull out only the numbers from the string using LINQ

var numbersFromString = new String(input.Where(x => x >= '0' && x <= '9').ToArray());

var numericVal = Int32.Parse(numbersFromString);

2voto

HS_Kernel Punkte 21

Hier ist mein Algorithmus

    //Fast, C Language friendly
    public static int GetNumber(string Text)
    {
        int val = 0;
        for(int i = 0; i < Text.Length; i++)
        {
            char c = Text[i];
            if (c >= '0' && c <= '9')
            {
                val *= 10;
                //(ASCII code reference)
                val += c - 48;
            }
        }
        return val;
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X