Hallo Liebe Community,
ich möchte mithilfe von RegEx folgenden String beabreiten:
"Das ist ein [xxxy] Beispiel text [acbc] den es [xx01] in vielen Varianten gibt [22112] !"
Das Ergebnis sollte so aussehen:
"Das ist ein Beispiel TExt den es in vielen Varianten gibt!"
Ergo: Möchte ich alle [] und deren Inhalt aus dem String entfernen.
Ist RegEx da die einfachste Lösung? Oder gibt es vielleicht noch eine viel bessere Methode?
Gruss
Ich denke, reguläre Ausdrücke wären da das einfachste.
Guck dir mal die Regex.Replace-Methode (System.Text.RegularExpressions) an.
Hallo reloop,
Möchte ich alle [] und deren Inhalt aus dem String entfernen.
das ist trivial.
Kniffelig wird es, wenn du mögliche WhiteSpaces davor und danach in allen Fällen korrekt behandeln willst.
Dann wäre schon fast eine Aufgabe für das Programmier-Spiel (natürlich erst nachdem du es korrekt gelöst hast).
herbivore
Hallo dN!3L,
danke für den Tipp. Habe mich eingelesen und mir die Lösung erarbeitet, die für meinen Fall ausreichend ist.
Lösung:
new Regex(@"\[.*?\]").Replace(myString, "");
Und herbivore, das ist Tatsächlich eine kniffelige Sache. Da es durchaus auch Vorkommen kann, dass zwei "[]"-Werte aufeinander folgen.
Werde mir da mal Gedanken machen.
Danke für die Hilfe.
Gruss,
reloop
...das ist Tatsächlich eine kniffelige Sache...
Ist doch relativ einfach: new Regex(@"\s*\[.*?\]\s*").Replace(myString, " ");
Gruß, Christian.
Hallo reloop,
.*? ist gefährlich. Zwar funktioniert dein Pattern, so wie er jetzt ist, aber wenn du wegen der Leerzeichen noch daran rumbastelst, kann das schnell in die Hose gehen, siehe RegEx kürzester Match [und die Gefahren von .*?].
Verwende besser \[[^\]]*\]
Hallo TheBrainiac,
deine Lösung liefert z.B. bei "Das ist ein Satz [bla]." nicht das gewünschte, weil dann ein Leer_zeichen_ vor dem Punkt bleibt. Außerdem würdest du u.U. unerwünscht Leer_zeilen_ entfernen. Auch wenn mehrere Begriffe in Klammern hintereinander stehen - laut reloop kann das durchaus vorkommen - bleiben am Ende zuviele Leer_zeichen_ stehen. Und es gibt noch weitere Fälle, wo nicht das gewünschte rauskommt. Ich bleibe dabei: Eine Lösung, die in allen Fällen sinnvoll und korrekt mit Leerzeichen umgeht, ist ziemlich kniffelig. Am einfachsten wird es sein (\s*)\[[^\]]*\](\s*)
als Pattern zu verwenden und dann im MatchEvaluator zu entscheiden, welche WhiteSpaces erhalten bleiben müssen.
herbivore