Seite 1 von 1

Reguläre Ausdrücke Wortgrenzen (\b) mit Umlauten

Verfasst: 13.12.2018 12:40
von fabulouspaul
Hallo Gemeinde,

ich möchte mit einem regulären Ausdruck einen Text nach bestimmten Begriffen durchsuchen.
Eigentlich ganz einfach, aber ich stosse an eine Grenze, wenn die Begriffe Umlaute am Anfang oder Ende haben. Offensichtlich wertet "\b" als Wortbegrenzung einen Umlaut ebenfalls als Wortgrenze:

Code: Alles auswählen

EnableExplicit

Global regex
Global text.s

text = "Kühlmittel, Brötchen, Märchen, Übernahme, Örtlich, Ärger, Müüü"

regex = CreateRegularExpression(#PB_Any, "\b([a-zA-Z0-9äöüßÄÖÜ]+)\b")
If regex 
  ExamineRegularExpression(regex, text)
  While NextRegularExpressionMatch(regex)
    Debug RegularExpressionMatchString(regex)
  Wend
  FreeRegularExpression(regex)
EndIf

End
Beim googlen habe ich etwas davon gefunden, dass man mit "Set Locale" etwas einstellen kann, aber wie mache ich das?
Oder hat jemand eine bessere Idee für einen passenden regulären Ausdruck.
Eine Suche OHNE regulären Ausdruck möchte ich auf Grund der Flexibilität vermeiden.

Re: Reguläre Ausdrücke Wortgrenzen (\b) mit Umlauten

Verfasst: 13.12.2018 13:59
von STARGÅTE
Du brauchst gar kein \b weil ja das Word automatisch endet, wenn keines der Zeichen [a-zA-Z0-9äöüßÄÖÜ]+ vorkommt.

Code: Alles auswählen

EnableExplicit

Global regex
Global text.s

text = "Kühlmittel, Brötchen, Märchen, Übernahme, Örtlich, Ärger, Müüü"

regex = CreateRegularExpression(#PB_Any, "[a-zA-Z0-9äöüßÄÖÜ]+")
If regex 
  ExamineRegularExpression(regex, text)
  While NextRegularExpressionMatch(regex)
    Debug RegularExpressionMatchString(regex)
  Wend
  FreeRegularExpression(regex)
EndIf

End

Re: Reguläre Ausdrücke Wortgrenzen (\b) mit Umlauten

Verfasst: 13.12.2018 14:46
von fabulouspaul
Danke STARGÅTE, manchmal sieht man den Wald vor lauter Bäumen nicht! :allright:

Re: Reguläre Ausdrücke Wortgrenzen (\b) mit Umlauten

Verfasst: 13.12.2018 14:47
von Nino
STARGÅTE hat geschrieben:Du brauchst gar kein \b weil ja das Word automatisch endet, wenn keines der Zeichen [a-zA-Z0-9äöüßÄÖÜ]+ vorkommt.
Das stimmt. Der Nachteil bei dieser Lösung ist allerdings, dass sie nicht mehr funktioniert, sobald in der Wortliste ein Buchstabe vorkommt, der in dem verwendeten Regulären Ausdruck nicht enthalten ist. Wenn man die Beispiel-Wortliste z.B. um "Charité" ergänzt, wird dies deutlich.
Unicode Categories hat geschrieben:In addition to complications, Unicode also brings new possibilities. One is that each Unicode character belongs to a certain category. You can match a single character belonging to the "letter" category with \p{L}.
https://www.regular-expressions.info/unicode.html

Daher finde ich zur allgemeinen Verwendung folgende Lösung besser:

Code: Alles auswählen

EnableExplicit

Define regex, text.s

text = "Kühlmittel, Brötchen, Märchen, Übernahme, Örtlich, Ärger, Müüü, Charité"

regex = CreateRegularExpression(#PB_Any, "\p{L}+")
; Oder, wenn auch Ziffern eingeschlossen sein sollen:
; regex = CreateRegularExpression(#PB_Any, "[\p{L}\p{N}]+")

If regex
  ExamineRegularExpression(regex, text)
  While NextRegularExpressionMatch(regex)
    Debug RegularExpressionMatchString(regex)
  Wend
  FreeRegularExpression(regex)
EndIf

Re: Reguläre Ausdrücke Wortgrenzen (\b) mit Umlauten

Verfasst: 14.12.2018 13:00
von fabulouspaul
Guter Hinweis!
Und es funktioniert auch mit UTF-8 codierten Texten. :allright:

Re: Reguläre Ausdrücke Wortgrenzen (\b) mit Umlauten

Verfasst: 19.10.2021 23:23
von dadri
Falls sich jemand fragt, wie man trotzdem Wortgrenzen erkennt, wäre mein Vorschlag:

Code: Alles auswählen

/(^[\p{L}])|(\P{L}[\p{L}])/gmu
Ich nutze den Ausdruck, um alle Wortanfänge zu finden.
Mit \b und Umlauten im Wort wird leider vor und nach dem Umlaut immer eine Wortgrenze erkannt.