2011-01-27 12 views
10

Estoy tratando de eliminar algunas palabras en una cadena utilizando expresiones regulares usando el programa de abajo. Se está eliminando correctamente, pero está considerando solo las mayúsculas y minúsculas. Cómo hacerlo sin distinción de mayúsculas y minúsculas. Mantuve (?1) en el método replaceAll pero no funcionó.Insensibilidad de la caja de expresiones regex Java no funciona

package com.test.java; 

public class RemoveWords { 

    public static void main(String args[]) 
    { 

     // assign some words to string 

     String sample ="what Is the latest news today in Europe? is there any thing special or everything is common."; 

      System.out.print(sample.replaceAll("(is | the |in | any)(?i)"," ")); 
    } 
} 

SALIDA:

what Is latest news today Europe? there thing special or everything common. 

Respuesta

32

Es necesario colocar la parte (?i)antes del patrón que desea realizar entre mayúsculas y minúsculas palabras clave que se eliminarán con el límite de palabras (\\b). El problema surge porque puede haber dos palabras clave, una detrás de otra, separadas por un solo espacio.

Si desea eliminar las palabras clave sólo si están rodeados de espacio, a continuación, puede utilizar búsqueda positiva hacia delante y de búsqueda hacia atrás como:

(?i)(?<=)(is|the|in|any)(?=) 

See it

+0

Gracias. Ahora está funcionando – JavaGeek

+0

"the" existe en la salida. no reemplazó con "" y no elimina "IS", véalo http://www.ideone.com/HMxLr –

+0

Correcto. Por qué no reemplaza "el" con "". Cualquier problema con la expresión regular – JavaGeek

1

cambio is a [iI][sS]

sample.replaceAll("([iI][sS] ... 
+0

funciona, pero largo proceso en el que necesitamos para poner a cada personaje ¿Hay alguna manera mejor? – JavaGeek

+0

No puedo hacer esto. Creo que la respuesta @Cybernate parece correcta –

3

No creo que se puede especificar entre mayúsculas y minúsculas con la rápida sustitución. Pruebe un patrón en su lugar. espacios

System.out.print(sample.replaceAll("(?i)\\b(?:is|the|in|any)\\b"," ")); 
            ^^^^ 

See it

he reemplazado todo el: es decir:

package com.test.java; 

public class RemoveWords { 

public static void main(String args[]) { 
    // assaign some words to string 
    String sample ="what Is the latest news today in Europe? is there any thing special or everything is common."; 
    String regex = "(is | the |in | any)" 
    System.out.print 
    (
    Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(sample).replaceAll("") 
); 
} 
} 
+0

+1. para no tener problemas con la expresión regular –

+1

Perdón por la votación a la baja, pero como muestra la respuesta de @codaddicts, puedes * usar * esas banderas en 'String.replaceAll()'. –

+0

@Joachim: sin preocupaciones. Subí la respuesta de @Codaddicts porque llegué a saber cómo usar banderas en String.replaceAll – Chandu

Cuestiones relacionadas