Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Mit Hilfe von RegEx einen String manipulieren ( [] )
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

Mit Hilfe von RegEx einen String manipulieren ( [] )

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 2.891

beantworten | zitieren | melden

Ich denke, reguläre Ausdrücke wären da das einfachste.
Guck dir mal die Regex.Replace-Methode (System.Text.RegularExpressions) an.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo reloop,
Zitat
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
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
TheBrainiac
myCSharp.de - Member

Avatar #avatar-3152.png


Dabei seit:
Beiträge: 795
Herkunft: /dev/null

beantworten | zitieren | melden

Zitat von reloop
...das ist Tatsächlich eine kniffelige Sache...

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

Gruß, Christian.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von TheBrainiac am .
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"
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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 Leerzeichen vor dem Punkt bleibt. Außerdem würdest du u.U. unerwünscht Leerzeilen entfernen. Auch wenn mehrere Begriffe in Klammern hintereinander stehen - laut reloop kann das durchaus vorkommen - bleiben am Ende zuviele Leerzeichen 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
private Nachricht | Beiträge des Benutzers