Laden...

Worte mit Umlauten werden beim RegEx verschluckt

Erstellt von joshit vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.696 Views
J
joshit Themenstarter:in
34 Beiträge seit 2015
vor 8 Jahren
Worte mit Umlauten werden beim RegEx verschluckt

Hallo Zusammen,

ich hoffe dieses Mal bin ich hier richtig 😉

Ich habe (ein) Problem(e) mit meiner Regex - an sich funktioniert alles wie vorgesehen. Nur die Worte mit Umlaut werden geschluckt.


(?<Wort>[A-Za-zäÄöÖüÜ\-\s\(\)]*)

Sieht jemand den Fehler? Oder gibt es alternative Ideen??

Vielen Dank fürs lesen und denken 😉

Josh

Da kam eine Stimme aus dem Off: "Lächele, es könnte schlimmer kommen!" Ich lächelte. Und es kam schlimmer...

1.361 Beiträge seit 2007
vor 8 Jahren

Eigentlich sollte so etwas einwandfrei funktionieren.

Allerdings matchen .NET Regexe direkt Unicode Codepoints und ignorieren alternative Darstellungen. Das Problem ist beispielsweise, dass sich das deutsche Ä als zwei Varianten kodieren lässt:
*Ä (U+00C4) (Latin capital letter A with diaeresis) *A (U+0041,U+0308 ) (Latin capital letter A + Combining Diaresis)

Die sehen zwar gleich aus, aber ein Regex mit dem einen findet den anderen nicht - und umgekehrt.

Die Thematik wird bei Unicode Normalization gut beschrieben und String.Normalize(...) hilft dir dabei.

beste Grüße
zommi

//PS: Interessanterweise ignoriert das Forum hier nach dem posten das zusammengesetze Unicodezeichen und zeigt nur noch ein "A" an. 🤔

J
joshit Themenstarter:in
34 Beiträge seit 2015
vor 8 Jahren
Das Problem tritt auch bei Expresso auf

Danke für die schnelle Antwort!!

Du meinst also dass ich die Umlaute direkt über die Unicode_Codeierung ansteuern soll? Muss ich mir gleich mal anschauen ob das im Quellcode funktioniert.

Was mich allerdings stutzig macht, ist dass dieser Fehler schon beim Testen in Expresso auftritt. Ich hatte schon so oft irgendwelche Flüchtigkeitsfehler die jemand anderem schon beim ersten Blick aufgefallen sind - das scheint diesmal (leider) nicht der Fall zu sein....

Habe ich nicht vielleicht doch einen Syntax-Fehler o.Ä.?

P.S.: Welche Unicode-Codierung hinter einem der Zeichen steckt, ist dann wohl Dokument-Abhängig, oder?

Da kam eine Stimme aus dem Off: "Lächele, es könnte schlimmer kommen!" Ich lächelte. Und es kam schlimmer...

J
joshit Themenstarter:in
34 Beiträge seit 2015
vor 8 Jahren
Update

Ich glaube meine Quelle ist fehlerhaft.. Ich habe die Regex-Ausgabe von .NET in meine Expresso-Beispieldatei eingefügt - hier werden die Umlaute bereits in einer kleinen schwarzen Raute mit Fragezeichen (wie auch immer dieses Zeichen heißt) angezeigt.

Das heißt, dass ich ein Problem mit .NET habe. Denn die ersten Matches werden in Expresso richtig abgebildet. Der Fehler tritt also ab der 2. Behandlung meiner Daten auf.

Wie bekomme ich es denn hin dass die Ausgabe meiner Regex normalisiert wird??

Da kam eine Stimme aus dem Off: "Lächele, es könnte schlimmer kommen!" Ich lächelte. Und es kam schlimmer...

J
joshit Themenstarter:in
34 Beiträge seit 2015
vor 8 Jahren
Problem gelöst

Das Problem war nicht die Regex, sondern der StreamReader, weil meine Quelldatei mit dem Zeichensatz UTF7 codiert ist. Hat sehr lange gedauert das heraus zu finden und am Ende musste bei 2 Methodenaufrufen die Parameterliste um einen Paramter (Encoding.UTF7) erweitert werden.

Danke trotzdem für die Hilfestellungen!

Lieben Gruß

Da kam eine Stimme aus dem Off: "Lächele, es könnte schlimmer kommen!" Ich lächelte. Und es kam schlimmer...

A
29 Beiträge seit 2012
vor 8 Jahren

Dein Problem war jetzt zwar nicht im regulären Ausdruck begründet, aber trotzdem würde ich dir raten, anstelle von [A-ZäÄöÖüÜ] die Zeichenklasse \w (=Word Character) zu verwenden. Das ganze funktioniert dann nicht nur mit deutschen Umlauten sondern auch mit anderen Sonderzeichen; auch Sprachen mit nicht-lateinischem Alphabet, z.B. Hebräisch, Russisch, Arabisch, werden damit gematcht.

J
joshit Themenstarter:in
34 Beiträge seit 2015
vor 8 Jahren
Super Tipp!

Vielen Dank. Habe ich gleich umgestellt. Funktioniert einwandfrei 😃

Da kam eine Stimme aus dem Off: "Lächele, es könnte schlimmer kommen!" Ich lächelte. Und es kam schlimmer...