2009-07-16 3 views
24

У меня есть строка:Как заменить строку в круглых скобках с помощью регулярного выражения?

HLN (Formerly Headline News) 

Я хочу, чтобы удалить все внутри скобок и сами круглые скобки, оставив только:

HLN 

Я пытался сделать это с помощью регулярных выражений, но мой трудность состоит в этой схеме:

"(.+?)" 

Когда я использую его, он всегда дает мне PatternSyntaxException. Как я могу исправить свое регулярное выражение?

ответ

44

Поскольку круглые скобки являются специальными символами в регулярных выражениях, вам необходимо избегать их, чтобы они явно соответствовали им.

Например:

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

Он может понадобиться +? если может быть несколько скобок в скобках. – glmxndr

+2

Wups, она. – glmxndr

+0

да, она. Я кладу "?" на всякий случай несколько партизированный случай. @jjnguy: спасибо за объяснение. Оно работает! – Lily

8

Вы можете использовать следующее регулярное выражение для поиска круглых скобок:

\([^)]*\) 

в \( матчах на левую скобку, то [^)]* совпадает с любым количеством отличных персонажей правая скобка и совпадения \) на правой скобке.

Если вы включаете это в строке Java, вы должны избежать \ символы, такие как следующие:

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

boz теперь "bar "

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

выше удаляет пустые и непустые скобки с обеих сторон строки.

равнину регулярное выражение:

\([^\(]*\)

Вы можете проверить здесь:. http://www.regexplanet.com/simple/index.html

Мой код основан на предыдущих ответах

Смежные вопросы