SOLVED: String nach einer Jahreszahl durchsuchen



  • Hallo,

    ich bin noch nicht so ganz fit mit RegEx aber ich denke, es wäre das richtige Werkzeug für mich.

    Ich habe einen String der in etwa so aussieht:

    AW: RT56721934 - Place 012 2017 RP 249/76341

    Mein Code soll nun den string bis inkl der Jahreszahl 2017 ausgeben. Wie ich das dann mache, wenn ich die Position von 2017 kenne (mit Substring) weiß ich.

    Wie bekomme ich nun die Position einer genau vierstelligen Zahl, welche entweder mit 19 oder mit 20 beginnt und vor und hinter der Zahl ein Leerzeichen beinhaltet?

    Hier mein Code, der es jedoch nicht liefert, obwohl ich mich überhaupt erstmal auf irgend eine vierstellige Zahl beschränke:

    static void Main()
            {
                string str = "AW: MV37417405 - Werk 050 2017 LN 154/60231";
                string pattern = @"\\b[0-9]{4}b\\";
                System.Text.RegularExpressions.Regex RE = new System.Text.RegularExpressions.Regex(pattern);
                bool Matching = RE.IsMatch(str);
                System.Console.WriteLine("Matching: " + Matching.ToString());
    
                System.Console.ReadLine();
            }
    

    Es wird jeweils

    false
    

    zurückgegeben,
    was ich nicht ganz verstehe.


  • Mod

    Dein zweites \\b ist falsch geschrieben. Insgesamt sollte "\\b(19|20)[0-9]{2}\\b" funktionieren, ich bin aber nicht der große Regex-Experte.



  • Hallo Sepp,

    danke, aber das funktioniert auch nicht. Leider hat man ja bei RegEx nicht wirklich ne gute Debug-Funktion um zu sehen, woran er sich aufhängt.


  • Mod

    Ich habe es im Suchfeld eines Editors (der Regex versteht) gegen deine Zeichenkette getestet. Ungefähr so wie hier:
    https://regex101.com/r/8kd5LK/1
    Wie du siehst, passt es dort. Wenn es bei dir nicht geht, machst du eventuell etwas am C# falsch. Das kann ich aber nicht beurteilen, da ich kein C# spreche.



  • Hi,

    mit diesem pattern scheint es zu funktionieren:

    string pattern = "( [1][0-9]{3} | [2][0][0-9]{2} )";
    


  • string pattern = @"\\b[0-9]{4}b\\";
    

    Das schaut doppelt gemoppelt aus.
    Wie viele \ willst du im fertigen string vor dem b ? Einen würd' ich sagen, oder? Also entweder @"\b..." oder "\\b..." .


Anmelden zum Antworten