2009-08-25 5 views
4

Das Durchsuchen einer Datei, die in Hindi (Devanagri) (UTF-16) geschrieben wird, führte zu dem folgenden Problem.Suchen von Unicode-Text mit Regex

Die Datei enthält:

त्रास ततत जुग नींद ना हा बु

Beachten Sie, dass das erste Zeichen 'त्र' ist ein mehrere Codepunkt त + ् + र Jetzt, während Suche nach 'त' Ich erhalte 4 Treffer einschließlich des त des ersten Chars. Ich benutze Java.

Wie kann ich nach 'त' s suchen, die nicht Teil mehrerer Codepunktzeichen sind?

Jede Hilfe wird geschätzt. :)

Antwort

1

Sie können dies mit Unicode-Eigenschaften tun, glaube ich.

त(?!\p{M}+) 

Sollte die त Codepunkt entsprechen, solange sie nicht durch irgendwelche Codepunkte in der M Kategorie folgt, die Zeichen sind bestimmt mit anderen Zeichen kombiniert werden. Es verwendet ein negatives Lookahead, um diese Behauptung zu machen.

E: und wenn das nicht sofort funktioniert, versuchen

\uxxxx(?!\p{M}+) 

Wo die xxxx die Nummer des त Codepunkt des Symbols ist.

+0

Danke Sean :) Der negative Lookahead funktioniert gut. –

0

Es scheint, dass die Glyphe 'त्र' tatsächlich eine Ligatur oder Konjunktion ist, kein Mehrfachcodepunkt. Also ich denke, Sie erhalten das erwartete Ergebnis (es sei denn, Sie möchten Glyphen übereinstimmen). Siehe http://en.wikipedia.org/wiki/Devanagari#Conjuncts.

+0

Ich bin hier ein wenig verwirrt..Sind nicht Glyphen durch mehrere Codepunkte dargestellt? Aber ja, ich möchte das Programm mit Glyphen übereinstimmen. Ich benutze das Paket java.util.regex. Es gibt ein paar Probleme mit Conjuncts für zB. ध्वं, ल्ल्य werfen PatternSyntaxException, wenn sie als Eingabe verwendet werden, um die Regex mithilfe der Pattern.compile() -Methode zu bilden. –

+0

Hier verwendet jedes Zeichen der Basiszeichen einen einzelnen Codepunkt (wie die meisten Zeichen in der BMP), während das Symbol für die Ligatur mehrere (3) verwendet. Aber da Sie Glyphen trotzdem anpassen möchten, passt Seans Lösung zu Ihren Bedürfnissen. Ich denke, dass Java Probleme mit mehreren Codepunkt-Sequenzen hat. – fbonnet

Verwandte Themen