Laden...

Mit Hilfe von RegEx einen String manipulieren ( [] )

Erstellt von reloop vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.308 Views
reloop Themenstarter:in
139 Beiträge seit 2010
vor 12 Jahren
Mit Hilfe von RegEx einen String manipulieren ( [] )

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

2.891 Beiträge seit 2004
vor 12 Jahren

Ich denke, reguläre Ausdrücke wären da das einfachste.
Guck dir mal die Regex.Replace-Methode (System.Text.RegularExpressions) an.

49.485 Beiträge seit 2005
vor 12 Jahren

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

reloop Themenstarter:in
139 Beiträge seit 2010
vor 12 Jahren

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

795 Beiträge seit 2006
vor 12 Jahren

...das ist Tatsächlich eine kniffelige Sache...

Ist doch relativ einfach: new Regex(@"\s*\[.*?\]\s*").Replace(myString, " ");

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
49.485 Beiträge seit 2005
vor 12 Jahren

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