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
Regex: Alle Zeichen zwischen Bindestrich und "bis" entfernen
Debiii
myCSharp.de - Member



Dabei seit:
Beiträge: 21
Herkunft: Deutschland

Themenstarter:

Regex: Alle Zeichen zwischen Bindestrich und "bis" entfernen

beantworten | zitieren | melden

Hey liebe Community,

ich hätte da eine Frage bezüglich dem Regex in C#.

Ich habe das folgende Übungsbeispiel und die Regex dazu, was nicht funktioniert.^^

string text = "Hallo mein Name ist Jan - besuche noch die Schule bis nächstes Jahr";

Match = Regex.Match(text, @"[A-Za-z0-9]");

Ich weiß das der Regex blödsinning ist, aber wie kann ich es hin bekommen, einen Regex zu definieren, mit dem ich Alle Zeichen bis (bindestrich, also "-") auslese und dann alle Zeichen nach dem Wort "bis". Und der Rest der Zeichenkette die übrig bleibt sollen entfernt werden. Ist mein erstes mal mit Regex.

Ich wäre über Tipps und Ratschläge sehr dankbar :)

Ps. Ich weiss das dieser Fall mit Substring zu lösen ist,aber ich möchte das umbeding über einen Regex regeln. Das ich ein algemeines Muster für diese Fälle habe
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Debiii am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16112

beantworten | zitieren | melden

Bitte beschäftige Dich ein paar Stunden mit Regex, dann kannst Du das Problem alleine lösen.
[Artikel] Regex-Tutorial

Das Forum ist kein Pattern-Generator.
[Hinweis] Wie poste ich richtig? Punkte 4
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Debiii,

wenn es darum geht, einen bestimmten Teil aus einem String zu entfernen, ist der normale Ansatz, einen Pattern zu schreiben, der auf den zu entfernenden Teil passt und ihn dann mit Regex.Replace durch einen leeren String zu ersetzen und somit zu entfernen.

In deinem Fall ist der zu entfernende Text durch Begrenzer (Bindestrich und "bis") definiert. Wenn die Begrenzer jeweils nur einmal vorkommen und wenn sie mit entfernt werden sollen, ist es im Grunde ganz einfach: Begrenzer1.*Begrenzer2

Wenn die Begrenzer nicht entfernt werden sollen, müsste man den Pattern so schreiben, dass er nur auf den Text zwischen den Begrenzern passt. Trotzdem müssen die Begrenzer in dem Pattern natürlich trotzdem irgendwie auftauen, den es ist ja nur durch sie definiert, welcher Text dazwischen liegt. Was wie ein Widerspruch klingt ist keiner, weil man für die Anwesenheit der Begrenzer positive Lookaheads - und behinds verwenden kann. Das ist aber für Regex-Anfänger möglicherweise nicht so ganz leicht zu durchschauen bzw. anzuwenden.

Deshalb kann man auch den Pattern aus dem zweiten Absatz verwenden, aber als Ersetzungstext nicht den leeren String sondern "Begrenzer1Begrenzer2" einsetzen.

Es gibt natürlich noch andere Möglichkeiten, das Ziel zu erreichen. Letztlich ist es eine Frage der persönlichen Vorlieben. Es würde also auch mit Regex.Match gehen, wenn man anschließend die beiden Matches verkettet. Ich persönlich fände das hier aber weniger passend.

Schwieriger wird es, wenn die Begrenzer auch an anderen Stellen auftauchen können, z.B. in "Hallo mein Name ist Hans-Peter - besuche noch die Schule bis nächstes Jahr" wo in dem Namen "Hans-Peter" ebenfalls ein Bindestrich auftaucht. Wie man das löst, hängt dann von den genauen Umständen ab. Im konkreten Fall würde es reichen " - " statt einfach nur "-" als Begrenzer zu verwenden.

herbivore
private Nachricht | Beiträge des Benutzers