2009-07-16 7 views
24

Ich habe eine Zeichenfolge:Wie kann ich eine Zeichenfolge in Klammern mit einem Regex ersetzen?

HLN (Formerly Headline News) 

ich alles in den Pars und die Pars selbst, so dass nur entfernen möchten:

mit einem regex
HLN 

Ich habe versucht, dies zu tun, aber mein Schwierigkeit ist mit diesem Muster:

"(.+?)" 

Wenn ich es verwenden, es gibt mir immer ein PatternSyntaxException. Wie kann ich meine Regex beheben?

Antwort

44

Da Klammern Sonderzeichen in Regexps sind, müssen Sie sie ausschließen, damit sie explizit übereinstimmen.

Zum Beispiel:

"\\(.+?\\)" 
+3

Er möchte vielleicht +? wenn es mehrere Klammern gibt. – glmxndr

+2

Wups, sie. – glmxndr

+0

ja, sie. Ich legte "?" nur für den Fall, dass mehrere Elternteile Fall. @jjnguy: Danke für die Erklärung. Es klappt! – Lily

8

Sie könnten den folgenden regulären Ausdruck verwenden Parenthesen zu finden:

\([^)]*\) 

die \( Matches auf einer linken Klammer, die [^)]* eine beliebige Anzahl von Zeichen, die nicht die rechte Klammer, und die \) passt auf einer rechten Klammer.

Wenn Sie dies in einer Java-String einschließlich sind, müssen Sie die \ Zeichen wie folgt entkommen:

String regex = "\\([^)]*\\)"; 
3
String foo = "bar (baz)"; 
String boz = foo.replaceAll("\\(.+\\)", ""); // or replaceFirst 

boz jetzt "bar "

11
String foo = "(x)()foo(x)()"; 
String cleanFoo = foo.replaceAll("\\([^\\(]*\\)", ""); 
// cleanFoo value will be "foo" 

Die obige leer entfernt und nicht leere Klammern von jeder Seite der Zeichenfolge.

Ebene regex:

\([^\(]*\)

Sie können hier testen. http://www.regexplanet.com/simple/index.html

Mein Code basiert auf früheren Antworten

Verwandte Themen