2009-07-16 65 views
24

Tôi có một chuỗi:Làm thế nào tôi có thể thay thế một chuỗi trong dấu ngoặc đơn bằng cách sử dụng regex?

HLN (Formerly Headline News) 

Tôi muốn loại bỏ tất cả mọi thứ bên trong dấu ngoặc và dấu ngoặc mình, chỉ để lại:

HLN 

Tôi đã cố gắng để làm điều này với một regex, nhưng tôi khó khăn là với mẫu này:

"(.+?)" 

Khi tôi sử dụng nó, nó luôn mang lại cho tôi PatternSyntaxException. Làm thế nào tôi có thể sửa regex của tôi?

Trả lời

44

Vì dấu ngoặc đơn là các ký tự đặc biệt trong regexps, bạn cần phải thoát khỏi chúng để khớp chúng một cách rõ ràng.

Ví dụ:

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

Ông có thể muốn +? nếu có thể có một số phần chahetized. – glmxndr

+2

Wups, cô ấy. – glmxndr

+0

vâng, cô ấy. Tôi đặt "?" chỉ trong trường hợp nhiều trường hợp được cha mẹ hóa. @jjnguy: cảm ơn vì đã giải thích. Nó hoạt động! – Lily

8

Bạn có thể sử dụng các biểu thức chính quy sau đây để tìm ngoặc đơn:

\([^)]*\) 

các \( trận đấu trên một ngoặc trái, [^)]* phù hợp với bất kỳ số lượng các nhân vật khác hơn dấu ngoặc đơn phải và các đối sánh \) trên dấu ngoặc đơn phải.

Nếu bạn bao gồm cả điều này trong một chuỗi java, bạn phải thoát khỏi \ ký tự như sau:

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

boz tại là "bar "

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

Trên đây loại bỏ trống và dấu ngoặc đơn không trống từ hai bên của chuỗi.

regex đơn giản:

\([^\(]*\)

Bạn có thể kiểm tra ở đây:. http://www.regexplanet.com/simple/index.html

Mã của tôi được dựa trên câu trả lời trước

Các vấn đề liên quan