2012-12-26 9 views
5

나는 큰 문자열 안에 "}"쌍, 여러 번 "{"를 포함하고 수 있다는 자바 문자열이 이 쌍 :Java 문자열에 포함 된 중괄호를 제거하는 방법은 무엇입니까?</p> <pre><code>"My name is {name}. I am a {animal}. I like to {activity} whenever it rains." </code></pre> <p>등 내가 모든 인스턴스를 제거 할 코드를 작성하는 것을 시도하고있다 :

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

이 쌍은 문자열 내부 어디 발생할 수 있으며, 전혀 발생하지 않을 수 있습니다. 분명히 String#replaceAll(someRegex, "") 여기 순서이지만, 나는 someRegex 제대로 할 수없는 것 :

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

어떤 아이디어? 미리 감사드립니다.

+0

지금까지 무엇을 가지고 계십니까? 그렇게 어렵지 않습니다. 확실히 시도해보십시오. –

+0

@RohitJain - 최상의 (실패한) 시도를 위해 업데이트를 참조하십시오. –

+0

은 아마도 * 대신 *를 사용해야합니다. 0이 상 또는 그 이상이 {그 뒤에}있는 정규 표현식 – njzk2

답변

9

{과 일치 시키려면이 문자를 이스케이프 처리해야합니다. regex에는 몇 가지 특별한 의미가 있습니다. 따라서 \\{\\}이 필요합니다. 또는 문자 클래스로 묶을 수도 있습니다.

그런 다음 두 항목을 일치 시키려면 .*을 사용할 수 있습니다. dot (.)은 모든 문자와 일치합니다. 그리고 *은 한정자이며 일치하는 것은 0 or more을 의미합니다.

그래서, 당신의 정규식은 다음과 같습니다 -

\\{.*?\\} 

또는 -

[{].*?[}] 

주 나는 거기에 주저 정량 사용 한 것을 - .*?합니다. 끝에 ?을 적어 둡니다. 이 경우 첫 번째 }까지 일치하는 데 사용됩니다. .*? 대신 .*을 사용하는 경우 정규식은 {의 첫 번째 문자열에서 마지막 }까지의 전체 문자열을 포함하고 모든 것을 바꿉니다.

또한 특수 정규식 메타 문자는 character class - [] 건 안에 사용될 때 특별한 의미가 없습니다. 그래서 그런 식으로 사용할 때 탈출 할 필요가 없습니다. 따라서 2 정규 표현식.

매우 간단하게 보입니다. 그렇습니까? 이제는 Regular Expression에 대해 자세히 알아 보려면 튜토리얼을 살펴 보겠습니다. 단어 문자가 동봉

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

위의 정규식 줄무늬 : 당신은 작업을 My name is . I am a . I like to whenever it rains.

+0

좋은 철저한 설명. – Lucas

+0

숫자가 포함되어 있지 않으면 대개 정규 표현식에서'{}'을 이스케이프 할 필요가 없습니다. 다음은 몇 가지 샘플입니다. http://regex101.com/r/xR8yU3 –

+0

@Lindrian. 글쎄, 네 말이 맞아. 어떤 곳에서 나는 나 자신이 그들을 탈출 할 필요가 없다고 느꼈다. 가끔 혼란스러워합니다. 그래서'Character class'를 특수 문자와 함께 사용하는 것을 선호합니다. –

0

replaceAll("\\{.*?\\}", "") 시작할 수 있습니다 {} 안에. 특정 특수 문자를 포함 시키려면 중괄호 안에 언급 된 \w과 함께 포함 시키십시오.

1

는 간단한 정규식 \{\w*\} 아래와 같이 사용해보십시오

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

인쇄를해야 http://www.regular-expressions.info/tutorial.html