Pregunta

Estoy escribiendo expresiones regulares de texto Unicode en Java. Sin embargo, para el guión particular que estoy usando - Devanagari (0900 - 097F) hay un problema con los límites de palabra. \ B coincide con los caracteres que son vocales dependientes (como 093E-094C), ya que son tratados como caracteres de espacio.

Ejemplo: Supongamos que tengo la cadena: "कमल कमाल कम्हल कम्हाल" Tenga en cuenta que 'मा' en la segunda palabra se forma combinando म y ा (reconocido como un carácter de espacio). Del mismo modo, en la última palabra. Esto conduce \ b para que coincida con el 'ल' en 'कमाल' con expresión regular \ b \ w \ b que no es correcta de acuerdo con el lenguaje.

Espero que el ejemplo de ayuda.

¿Puedo escribir una expresión regular que se comporta como \ b, excepto que no coincide con ciertos caracteres? Cualquier comentario será agradecido.

¿Fue útil?

Solución

Usted debe ser capaz de lograr lo que quiere con los siguientes operadores de expresiones regulares:

(?=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

(Lo anterior es citado de la Java 6 documentación de la API del patrón .)

Uso (?<![foo])(?=[foo]) en lugar de \b antes de una palabra, y (?<=[foo])(?![foo]) en lugar de \b después de una palabra, donde "[foo]" es el conjunto de caracteres "palabra"

Otros consejos

El equivalente para los límites de las palabras (si los límites no lo que estabas esperando para son) sería:

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

Esto se debe a un "límite de palabra" significa "un lugar donde hay un personaje en un lado y no en el otro)

Así que con Look-Ahead expresiones mirada-atrás y, puede definir su propia clase de caracteres [X-Y] para comprobar cuando se desea aislar un "límite de la palabra"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top