2015-06-09 8 views
6

IRegular Expression alles zu entfernen, aber Zeichen und Zahlen in eckigen Klammern

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

es funktioniert gut, wenn im folgenden Fall

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

produziert:

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

aber in Bei der folgenden Zeichenfolge werden nur die eckigen Klammern in eckigen Klammern im ersten Lauf entfernt

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

produziert:

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

warum ist '+ 'in' a + b + c1' nicht entfernt? .. Nach Ihrer Frage sollte es nicht da sein, oder? Was wäre, wenn der Ausdruck "a + b + c1 ++++ -" wäre ... was sollte die Ausgabe sein? – TheLostMind

+0

Entschuldigung ich habe einen Fehler beim Schreiben gemacht –

+7

Verschachtelte Klammern können nur durch Regex gelöst werden. Schreibe einen Parser dafür. – anubhava

Antwort

2

Übersetzen von mir in einer Antwort

Sie diese einfache Analyse für den Ersatz in Java verwenden können:

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

vielen Dank es funktioniert perfekt! –

+0

das einzige Problem damit ist, dass Sie nicht verschachtelte verschachtelte Klammer setzen können –

+0

Ja, das ist richtig, Klammern sollten für diesen einfachen Ansatz ausgeglichen sein. – anubhava