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
[gelöst] Regex: Wort aus Zeichen *und* Zeichenfolge
sugar76
myCSharp.de - Member



Dabei seit:
Beiträge: 66
Herkunft: Berlin

Themenstarter:

[gelöst] Regex: Wort aus Zeichen *und* Zeichenfolge

beantworten | zitieren | melden

Hallo,

ein besserer Titel für meine Frage ist mir leider nicht eingefallen

Ich suche einen regulären Ausdruck, der ein Wort matcht, welches folgendes enthält (alles optional):
- Buchstaben
- Ziffern
- Die Zeichenfolge
Wichtig: Doppelpunkte ohne vorangestelltes Fragezeichen sind nicht im Wort enthalten. Wenn Doppelpunkt, dann muss davor ein Fragezeichen kommen.

Den gesuchten Wörtern ist immer eine Reihe von Doppelpunkten vorangestellt.

Beispiel (die gesuchten Wörter in großer Schrift):
:::::::::::mTMFN1:********0340+:::::::::SOiPhone

Mein Ansatz ist, die Wörter mittels Capture Groups auszulesen. Folgende Regex ist mir bisher eingefallen:
:+([\w\d(\:question:)]+)

Das funktioniert nicht 100%, da der Doppelpunkt nach MFN1 im Match enthalten ist (was nicht sein soll):
- mTMFN1: (falsch, der Doppelpunkt am Ende soll nicht enthalten sein)
- SOiPhone (richtig)

Hier kann man damit rumspielen:

Frage: welche Regex matcht die gesuchte Zeichenfolge, aber ignoriert ':' ohne vorangestelltes Fragezeichen?

Gruß
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von sugar76 am .
private Nachricht | Beiträge des Benutzers
sugar76
myCSharp.de - Member



Dabei seit:
Beiträge: 66
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Manchmal hilft es, das Problem zu formulieren und dann kommt man von selbst auf die Lösung ...

Ich habe es einfach so gelöst, dass ich vor dem Matchen die Zeichenfolge '' durch '\' ersetze. Dann gibt es beim Matchen keine Konflikte mit den anderen Doppelpunkten.

Als Regex verwende ich dann statt
:+([\w\d(\:question:)]+)
diese:
:+([\w\d\\]+)
private Nachricht | Beiträge des Benutzers
BhaaL
myCSharp.de - Member

Avatar #erP6yAFiewXrJTqrvg6R.jpg


Dabei seit:
Beiträge: 645

beantworten | zitieren | melden

Sieht ein wenig nach UN/EDIFACT aus.
Falls ich damit ins Schwarze treffe, würde ich empfehlen es nicht per Regex zu machen sondern einen (wenn auch minimalistischen) Parser zu schreiben - erstens deshalb, weil die Strings im Normalfall einer gewissen Struktur entsprechen und zweitens weil sowohl das Escape-Zeichen (das Fragezeichen ?) als auch das Komponenten-Trennzeichen (der Doppelpunkt :) über das UNA Segment angepasst/auf andere Zeichen geändert werden können.
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 sugar76,

die Klimmzüge mit dem vorherigen Ersetzen sind nicht nötig. Du kannst einfach eine (Regex-)Alternative verwenden. Also dein Pattern minimalinvasiv umgesetzt, würde dann zu:

:+((\w|\d|?:)+)

oder

:+([\w\d]|?:)+)

herbivore

PS: Ein passender Titel wäre gar nicht so schwer zu finden gewesen, z.B. "Regex: Wort aus Ziffern, Buchstaben und einer Zeichenfolge" oder noch kürzer "Regex: Wort aus Zeichen *und* Zeichenfolge"
private Nachricht | Beiträge des Benutzers