2015-06-09 11 views
6

ho usatoespressioni regolari per rimuovere tutto, ma caratteri e numeri tra parentesi quadre

value.replaceAll("[^\\w](?=[^\\[]*\\])", ""); 

funziona bene se nel seguente caso

[a+b+c1 &$&$/]+(1+b&+c&) 

produce:

[abc1]+(1+b&+c&) 

ma in caso della stringa seguente rimuove solo le parentesi quadre entro parentesi quadre nella prima esecuzione

[a+b+c1 &$&$/[]]+(1+b&+c&) 

produce:

[a+b+c1 &$&$/]+(1+b&+c&) 
+1

perché è '+ 'in' a + b + c1' non viene rimosso? .. Secondo la tua domanda non dovrebbe essere lì giusto ?. E se l'espressione fosse 'a + b + c1 ++++ -' .. quale dovrebbe essere l'output? – TheLostMind

+0

scusa ho commesso un errore nella scrittura –

+7

Le parentesi nidificate non possono essere risolte solo con espressioni regolari. Scrivi un parser per questo. – anubhava

risposta

2

Traducendo i miei commenti in una risposta

È possibile utilizzare questa semplice analisi in Java per la sostituzione:

String s = "[a+b+c1 &$&$/[]]+(1+b&+c&)"; 
int d=0; 
StringBuilder sb = new StringBuilder(); 
for (char ch: s.toCharArray()) { 
    if (ch == ']') 
     d--; 
    if (d==0 || Character.isAlphabetic(ch) || Character.isDigit(ch)) 
     sb.append(ch); 
    if (ch == '[') 
     d++; 
} 
System.out.println(sb); 
//=> [abc1]+(1+b&+c&) 
+1

grazie mille funziona perfettamente! –

+0

l'unico problema è che non si può mettere la parentesi chiusa non chiusa –

+0

Sì, è giusto, le parentesi dovrebbero essere bilanciate per questo approccio semplice. – anubhava

Problemi correlati