27

I have a string:

HLN (Formerly Headline News)

I want to remove everything inside the parens and the parens themselves, leaving only:

HLN

I've tried to do this with a regex, but my difficulty is with this pattern:

"(.+?)"

When I use it, it always gives me a PatternSyntaxException. How can I fix my regex?

4 Answers 4

48

Because parentheses are special characters in regexps you need to escape them to match them explicitly.

For example:

"\\(.+?\\)"
Sign up to request clarification or add additional context in comments.

2 Comments

He might want .+? if there may be several parenthetized pieces.
yes, she. I put "?" just in case multiple parenthized case. @jjnguy: thanks for the explaination. It works!
19
String foo = "(x)()foo(x)()";
String cleanFoo = foo.replaceAll("\\([^\\(]*\\)", "");
// cleanFoo value will be "foo"

The above removes empty and non-empty parenthesis from either side of the string.

plain regex:

\([^\(]*\)

You can test here: http://www.regexplanet.com/simple/index.html

My code is based on previous answers

Comments

12

You could use the following regular expression to find parentheticals:

\([^)]*\)

the \( matches on a left parenthesis, the [^)]* matches any number of characters other than the right parenthesis, and the \) matches on a right parenthesis.

If you're including this in a java string, you must escape the \ characters like the following:

String regex = "\\([^)]*\\)";

Comments

4
String foo = "bar (baz)";
String boz = foo.replaceAll("\\(.+\\)", ""); // or replaceFirst

boz is now "bar "

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.