RegEx Zeilenumbruch wird nicht erkannt

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von FireEmerald.

    RegEx Zeilenumbruch wird nicht erkannt

    Hallo Zusammen,

    folgender HTML Code ist gegeben:

    HTML-Quellcode

    1. <html>
    2. -- Dies soll nicht erkannt werden... --
    3. Dies ist ein Text der nicht gewünscht ist.
    4. --
    5. 94739759384
    6. 84728974592758927895728579275987289578927857348995374953498753895
    7. --
    8. </html>

    Dies ist von diesem gewünscht:

    HTML-Quellcode

    1. --
    2. 94739759384

    und müsste von folgendem RegEx erkannt werden:
    Regex.Replace(tbInput.Text, "^--\n[0-9]{11}?\n", "", RegexOptions.Multiline)

    Die Betonung liegt auf müsste, denn es wird nichts erkannt.

    Meine Erklärung zu dem Pattern (Muster):
    ^ = Es muss ein Zeilenanfang sein, wo danach
    -- = diese zwei "normalen" Zeichen kommen.
    \n = Nach den Zeichen muss ein Zeilenumbruch kommen.
    [0-9] = Nach dem Zeilenumbruch dürfen nur Zahlen von 0 bis 9 kommen,
    {11} = es müssen genau 11 Zahlen sein, dann muss
    ? = das erste mal,
    \n = wieder ein Zeilenumbruch kommen.

    Das ^ wird durch die RegexOptions.Multiline so umgestellt, dass dadurch nicht nur der Anfang des Quelltextes erkannt wird, sondern jeder Zeilenanfang.

    Frage: Warum wird nichts erkannt?, obwohl das Muster rein theoretisch klappen sollte. In diversen Online Tools funktioniert der Code.
    z.B. regexpal.com

    Falls es jmd. testen möchte: RegExTest.7z (Visual Basic Express 2012 Projekt / Mit zwei Textboxen und ein paar Buttons etc...)

    Gruß, FireEmerald
    Musst Du diesen Test mit RegEx machen?
    Geht doch auch mit ReadAllLines(), IndexOf(), Contains().
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Den RegexTester finde ich persönlich recht unübersichtlich, nichts für ungut. Hingegen die Infos im Thread sind sehr hilfreich :)

    Ein untestbarer SearchPattern: Die Anwendung hat Richtextboxen eingebaut. Richtextbox codiert einen Zeilvorschub nicht mit \r\n, sondern nur mit \n. Das kann zu bösen Fehlern führen, wenn man Zeilvorschübe matchen will, die in der Produktiv-Umgebung evtl mit \r\n codiert sind. Der RegexPattern, der sowohl \r\n matcht, als auch \n , lautet: \r?\n

    Also man ersetze \n mit \r?\n und es funktioniert ^^

    RodFromGermany schrieb:

    Musst Du diesen Test mit RegEx machen?
    Ja, es muss in meinem Fall RegEx sein, da das Beispiel wo ich oben gezeigt hab nur sehr vereinfacht dargestellt ist ;)

    Es ging bei der Frage auch eher darum, wie man Zeilenumbrüche richtig erkennt.

    Gruß, FireEmerald