2012-12-26 13 views
5

Tôi có một chuỗi Java thể chứa "{" và "}" cặp, nhiều lần, bên trong một chuỗi lớn hơn:Làm thế nào để loại bỏ các dấu ngoặc nhúng trong chuỗi Java?

"My name is {name}. I am a {animal}. I like to {activity} whenever it rains." 

vv Tôi đang cố gắng để viết mã đó sẽ loại bỏ tất cả các trường các cặp:

"My name is . I am a . I like to whenever it rains." 

những cặp có thể xảy ra bất cứ nơi nào bên trong chuỗi, và có thể không xảy ra ở tất cả. Rõ ràng là một String#replaceAll(someRegex, "") là theo thứ tự ở đây, nhưng tôi dường như không thể có được someRegex phải:

// My best attempt. 
String stripped = toStrip.replaceAll("{*}", ""); 

Bất kỳ ý tưởng? Cảm ơn trước.

+0

Bạn có gì cho đến bây giờ? Nó không phải là khó khăn. Bạn chắc chắn nên thử. –

+0

@RohitJain - vui lòng xem bản cập nhật của tôi cho nỗ lực tốt nhất (không thành công). –

+0

có thể cần phải sử dụng. * Thay vì *, vì đó là một regexp – njzk2

Trả lời

9

Để khớp với {, bạn cần phải thoát khỏi nó. Vì nó có một số ý nghĩa đặc biệt trong regex. Vì vậy, bạn cần \\{\\}. Hoặc bạn cũng có thể kèm theo chúng trong một lớp nhân vật.

Và sau đó, để khớp với bất kỳ thứ gì giữa chúng, bạn có thể sử dụng .*. A dot (.) khớp với bất kỳ ký tự nào. Và * là một định lượng, có nghĩa là phù hợp với 0 or more.

Vì vậy, regex của bạn sẽ là: -

\\{.*?\\} 

hoặc: -

[{].*?[}] 

Lưu ý rằng, tôi đã sử dụng một lượng hóa bất đắc dĩ ở đó - .*?. Lưu ý ? ở cuối. Nó được sử dụng để phù hợp cho đến } đầu tiên trong trường hợp này. Nếu bạn sử dụng .* thay vì .*?, regex của bạn sẽ bao gồm chuỗi hoàn chỉnh từ { đầu tiên cho đến } cuối cùng và thay thế mọi thứ.

Ngoài ra, một ký tự meta regex đặc biệt, không có ý nghĩa đặc biệt khi được sử dụng bên trong một character class - điều đó [] điều. Đó là lý do tại sao, bạn không cần phải thoát khỏi chúng khi bạn sử dụng nó như thế. Do đó, Regex thứ 2.

Điều đó có vẻ khá đơn giản, phải không? Ok, bây giờ là thời gian để đi qua một số hướng dẫn để tìm hiểu thêm về Regular Expression. Bạn có thể bắt đầu với http://www.regular-expressions.info/tutorial.html

+0

giải thích kỹ lưỡng. – Lucas

+0

Bạn thường không phải thoát khỏi '{}' trong các regex trừ khi chúng chứa các chữ số. Dưới đây là một vài mẫu: http://regex101.com/r/xR8yU3 –

+0

@Lindrian. Vâng, bạn đã đúng. Ở một nơi nào đó, bản thân tôi cảm thấy rằng không cần phải trốn thoát chúng. Đôi khi tôi bị lẫn lộn với điều đó. Đó là lý do tại sao tôi thích sử dụng 'Lớp nhân vật' với các ký tự đặc biệt. –

0

replaceAll("\\{.*?\\}", "") nên thực hiện công việc

String stripped = "My name is {name}. I am a {animal}. I like to {activity} whenever it rains.".replaceAll("\\{.*?\\}", ""); 
System.out.println(stripped); 

in My name is . I am a . I like to whenever it rains.

1

Hãy thử sử dụng đơn giản nhất regex \{\w*\} như sau:

String s = "My name is {name}. I am a {animal}. I like to {activity} "+ 
       "whenever it rains."; 
    System.out.println(s.replaceAll("\\{\\w*\\}", "")); 

Các sọc regex trên các nhân vật từ kèm theo trong {}. Nếu bạn muốn bao gồm một số ký tự đặc biệt sau đó bao gồm chúng cùng với các \w được đề cập bên trong niềng răng.