2017-04-06 14 views
2

Ich versuche, die folgende Verwendung von regulären Ausdrücken (java replaceAll) zu tun: mit eckigen KlammernJava Regulärer Ausdruck in eckigen Klammern passende

**Input:** 
Test[Test1][Test2]Test3 

**Output** 
TestTest3 

Kurz gesagt, muss ich alles in eckigen Klammern entfernen.

Ich versuche dies, aber es funktioniert nicht:

\\[(.*?)\\] 

Möchten Sie helfen können?

Danke,
Sash

+0

VTC fehlt MCVE, wo das Muster nicht. http://ideone.com/wf5YMT –

+0

Haben Sie vor, _nested_ Klammern zu haben, oder wäre alles top Level, wie Sie hier gezeigt haben? –

+0

@TimBiegeleisen Alles Top Level. Danke –

Antwort

4

Sie diese Regex versuchen:

\[[^\[]*\] 

und ersetzen durch leere

Demo

Beispiel Java Quelle:

final String regex = "\\[[^\\[]*\\]"; 
final String string = "Test[Test1][Test2]Test3\n"; 
final String subst = ""; 
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); 
final Matcher matcher = pattern.matcher(string); 
final String result = matcher.replaceAll(subst); 
System.out.println(result); 
+0

Danke @Rizwan, es funktioniert, +1 für die Beispielquelle, obwohl Sie nicht den Schmerz brauchen! –

+0

@Scheine froh zu wissen, dass es für dich funktioniert hat und den Schmerz nie ausmacht! Solange die Quelle eine generierte ist :) Sie können auch aus regex101.com generieren –

2

Ihre ursprüngliche Muster funktioniert für mich:

String input = "Test[Test1][Test2]Test3"; 
input = input.replaceAll("\\[.*?\\]", ""); 
System.out.println(input); 

Ausgang:

TestTest3 

Beachten Sie, dass die Klammern in den Klammern nicht brauchen. Sie würden das verwenden, wenn Sie planen, den Inhalt zwischen jedem Klammerpaar zu erfassen, was Sie in Ihrem Fall nicht benötigen. Es ist nicht falsch, sie dort zu haben, nur nicht notwendig.

Demo hier:

Rextester

+0

Danke Tim. +1 für Sie. Das funktioniert, aber @Rizwan war schnell. –

Verwandte Themen