Frage

Ich schreibe regelmäßige Ausdrücke für Unicode -Text in Java. Für das bestimmte Skript, das ich verwende - Devanagari (0900 - 097F), gibt es ein Problem mit Wortgrenzen. b entspricht Zeichen, die abhängige Vokale sind (wie 093E-094c), da sie wie Raumzeichen behandelt werden.

Beispiel: Angenommen, ich habe die Zeichenfolge: "कमल कमाल कम्हल कम्हाल" Beachten Sie, dass 'मा' im 2. Wort gebildet wird, indem म und uckert (als Raumfigur erkannt) kombiniert wird. Ähnlich im letzten Wort. Dies führt dazu, dass b das 'ल' in 'कमाल' mit regulärem Ausdruck b w b übereinstimmt, der gemäß der Sprache nicht korrekt ist.

Ich hoffe das Beispiel hilft.

Kann ich einen regulären Ausdruck schreiben, der sich wie B verhält, außer dass er nicht zu bestimmten Zeichen passt? Jedes Feedback wird dankbar sein.

War es hilfreich?

Lösung

Sie sollten in der Lage sein, das zu erreichen, was Sie mit den folgenden Regex -Betreibern wollen:

(?=X)   X, via zero-width positive lookahead
(?!X)   X, via zero-width negative lookahead
(?<=X)  X, via zero-width positive lookbehind
(?<!X)  X, via zero-width negative lookbehind

(Das obige wird aus dem zitiert Java 6 Muster -API -Dokumente.)

Verwenden (?<![foo])(?=[foo]) anstelle von \b vor einem Wort und (?<=[foo])(?![foo]) anstelle von \b Nach einem Wort, wo "[foo]"Ist dein Satz" Wortzeichen "

Andere Tipps

Das Äquivalent für Wortgrenzen (wenn die Grenzen nicht das sind, was Sie erwartet haben) wäre:

 (?<!=[x-y])(<?=[x-y])...(?<=[x-y])(?![x-y])

Das liegt daran, dass eine "Wortgrenze" "einen Ort bedeutet, an dem sich auf der einen Seite ein Charakter befindet und nicht auf der anderen Seite)

Mit Ausdrucksformen aus Look-Fehen und Look-Shead können Sie Ihre eigene Zeichenklasse [XY] definieren, um zu überprüfen, wann Sie eine "Wortgrenze" isolieren möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top