2011-03-03 12 views
5

Estoy tratando de encontrar variantes unicode de un carácter ingresado por el usuario en un texto para resaltarlas. P.ej. si el usuario ingresa "Beyonce" me gustaría resaltar todo el texto con variantes como "Beyoncé" o "Beyônce" o Bèyönce "en el texto. Actualmente la única idea que tengo es crear una expresión regular reemplazando la cadena de entrada con un conjunto de grupos personaje como este:.Regex para encontrar todas las variantes de un cierto carácter dentro de un texto

"Beyonce" => "B[eêéè]y[óòôö]c[éèê]" 

pero esto parece ser una manera propensa muy tedioso y error de hacerlo lo que básicamente estoy buscando es un grupo de caracteres de expresiones regulares que coincide con todas las variantes de un carácter de entrada dado, algo como \ p {M} pero con la posibilidad de especificar la letra base. ¿Hay algo disponible como este en java regex? Y si no, ¿cómo podría mejorarse el proceso de creación de expresiones regulares? No creo que especifique todas las variantes a mano va a funcionar en el largo plazo.

+0

única cosa que puedo sugerir es para almacenar una cadena para cada personaje que contiene cada una va riant, entonces solo usa esa cadena en la expresión regular cada vez –

Respuesta

2

Hay varias maneras de representar un personaje acentuado. Hay un buen ejemplo en el javadoc de java.text.Normalizer:

For example, take the character A-acute. In Unicode, this can be encoded 
as a single character (the "composed" form): 

    U+00C1 LATIN CAPITAL LETTER A WITH ACUTE 

or as two separate characters (the "decomposed" form): 

    U+0041 LATIN CAPITAL LETTER A 
    U+0301 COMBINING ACUTE ACCENT 

La segunda forma sería hacer que sea relativamente fácil de acceder al carácter no acentuado, y afortunadamente Normalizador puede ayudar aquí:

Normalizer.normalize(text, Form.NFD); // NFD = "Canonical decomposition" 

a continuación, puede utilizar una expresión regular para ignorar (o eliminar) los caracteres no ASCII de la cadena, basado en:

[^\p{ASCII}] 
+0

Muy bien, intentaré jugar con esa. Gracias. –

Cuestiones relacionadas