Hallo,
gegeben sei folgender Test-String:
irgendwas
noch mehr irgendwas
hier können beliebig viele Zeilen sein
Zahl 1 ist "2"
ganz viel irgendwas
hier können beliebig viele Zeilen sein
Zahl 2 ist "unbekannt" und die Zeile hat n Leerzeichen am Anfang
Als Ausgabe möchte ich "2" und "unbekannt" haben.
Folgender Regex tut leider nicht was er soll:
^\s*Zahl 1 ist "(.+?)"$(?:^.*$)+?^\s*Zahl 2 ist "(.+?)"
Getestet mit regex101
Zahl 1 findet er, wenn ich den Part von Zahl 2 wegnehme.
Ich möchte nicht den Singleline mode nehmen, da sich das offenbar schlecht auf die Performance auswirkt...ist ein recht langer Quellcode einer Webseite.
Problem scheint das hier zu sein: (?:^.*$)+?
Damit möchte ich 1-n Zeilen beschreiben, in denen alles mögliche oder auch gar nichts steht. Jetzt wo ich es laut lese, wird das wohl Performance-Technisch auch nocht so toll sein und aufs gleiche raus kommen wie singleline. Kann mir hier jemand helfen? Am liebsten würde ich einfach die Zeilen-Anker ^ und $ Quantifizieren, aber das geht wohl nicht.
Geht's um eine Fingerübung mit regulären Grammatiken? Ansonsten kannst du doch einfach nach "Zahl 1 ist" bzw. "Zahl 2 ist" suchen.
Tut's das?
https://regex101.com/r/OVWrGT/1
Im Prinzip hab ich das Pattern nur reduziert, dass es nicht den großen Bereich findet, sondern die zwei Teilbereiche.
Dann hast Du halt nicht ein Ergebnis mit allen Werten, sondern mehrere Ergebnisse mit je einem Wert, die Du dann in C# noch durchsuchen muss.
Übrigens:
regex101 kann speichern, drück einfach STRF + S, dann bekommst Du einen Link wie oben.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.