2011-11-21 28 views
7

Ho usato la seguente espressione regolare per provare a rimuovere le parentesi e tutto ciò che è contenuto in una stringa denominata name.Rimuovere tutto tra parentesi java usando regex

name.replaceAll("\\(.*\\)", ""); 

Per qualche motivo, questo lascia il nome invariato. Che cosa sto facendo di sbagliato?

risposta

18

Le stringhe sono immutabili. Devi fare questo:

name = name.replaceAll("\\(.*\\)", ""); 

Edit: Inoltre, dal momento che il .* è avido, ucciderà il più che può. Quindi "(abc)(def)" verrà convertito in "".

+0

Grazie mille. Nella mia particolare applicazione, non sono preoccupato per la nidificazione. – Daniel

+1

In realtà, se ci penso un po 'di più, il nesting non sarà un problema perché il '. *' È avido di default. Il vero problema è con stringhe come '(abc) (def)' che saranno completamente cancellate. –

+0

Inoltre non è un problema nella mia situazione. Non ci sarà mai più di un insieme di parentesi. – Daniel

2

String.replaceAll() non modifica la stringa originale, ma restituisce quella nuova. Quindi è necessario fare:

name = name.replaceAll("\\(.*\\)", ""); 
2

Se leggete il Javadoc for String.replaceAll(), si noterà che specifica che la stringa risultante è il valore di ritorno .

Più in generale, String s sono immutabili in Java; non cambiano mai valore.

6

Come mentionend da da Jelvis "*" seleziona tutto e convertiti "(ab) ok (CD)" a ""

La versione di seguito funziona in questi casi "(ab) ok (cd)" -> "ok", selezionando tutto tranne la parentesi chiusa e rimuovendo gli spazi bianchi.

test = test.replaceAll("\\s*\\([^\\)]*\\)\\s*", " "); 
+0

Questo fallisce quando 'test =" (testo (un po 'più di testo) poi un po' di più) "'. – Saheb

0

sto usando questa funzione:

public static String remove_parenthesis(String input_string, String parenthesis_symbol){ 
    // removing parenthesis and everything inside them, works for(),[] and {} 
    if(parenthesis_symbol.contains("[]")){ 
     return input_string.replaceAll("\\s*\\[[^\\]]*\\]\\s*", " "); 
    }else if(parenthesis_symbol.contains("{}")){ 
     return input_string.replaceAll("\\s*\\{[^\\}]*\\}\\s*", " "); 
    }else{ 
     return input_string.replaceAll("\\s*\\([^\\)]*\\)\\s*", " "); 
    } 
} 

si può chiamare in questo modo:

remove_parenthesis(g, "[]"); 
remove_parenthesis(g, "{}"); 
remove_parenthesis(g, "()"); 
Problemi correlati