2009-08-25 5 views
4

La recherche dans un fichier écrit en hindi (Devanagri) (UTF-16) a donné lieu au problème suivant.Recherche d'un texte Unicode à l'aide de regex

Le fichier contient:

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

Notez que le premier char 'त्र' est un point de code multiple de त + ् + र Maintenant, alors que recherche de 'त' J'obtiens 4 parties dont le त du premier caractère. J'utilise Java.

Comment puis-je rechercher les 'त' qui ne font pas partie de plusieurs points de code.

Toute aide sera appréciée. :)

Répondre

1

Vous pouvez le faire en utilisant les propriétés unicode, je crois.

त(?!\p{M}+) 

doit correspondre au point de code त tant qu'il est pas suivi par tous les points de code dans la catégorie M, qui sont des caractères destinés à être combinés avec d'autres personnages. Il utilise un lookahead négatif pour faire cette affirmation.

E: et si cela ne fonctionne pas tout de suite, essayez

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

Lorsque le xxxx est le numéro du point de code du त symbole.

+0

Merci Sean :) Le lookahead négatif fonctionne bien. –

0

Il semble que le glyphe 'त्र' soit en fait une ligature ou une conjonction, et non un caractère de point de code multiple. Donc, je suppose que vous obtenez le résultat attendu (sauf si vous voulez faire correspondre glyphes). Voir http://en.wikipedia.org/wiki/Devanagari#Conjuncts.

+0

Je suis un peu confus ici .. Ne sont pas des glyphes représentés par plusieurs points de code? Mais oui, je veux que le programme corresponde aux glyphes. J'utilise le paquet java.util.regex. Il y a quelques problèmes avec conjuncts par exemple. ध्वं, ल्ल्य lance PatternSyntaxException lorsqu'il est pris en entrée pour former l'expression régulière en utilisant la méthode Pattern.compile(). –

+0

Ici, chacun des glyphes des caractères de base utilise un seul point de code (comme le font la plupart des caractères dans le BMP), alors que le glyphe de la ligature en utilise plusieurs (3). Mais comme vous voulez faire correspondre les glyphes de toute façon, la solution de Sean répond à vos besoins. Je suppose que Java a des problèmes avec plusieurs séquences de points de code. – fbonnet

Questions connexes