2014-07-14 7 views
1

자바를 사용하여 매우 많은 양의 일반 텍스트 파일을 포맷 중이므로 어포 스트로피를 제외한 모든 구두점을 제거해야합니다. 내가 원래 replaceAll 문에 대한 정규식을 설정했을 때, 지금 나는 그것을에서 작동하지 않는 것으로 설정 한 특정 파일/구두점을 발견했습니다 제외하고, 내가 알고 모든 것을 없애했다.특정 구두점을 제거하는 자바 정규식

holdMe = holdMe.replaceAll("[,_\"-.!?:;)(}{]", " "); 

다른 구두점이 모두 지워지기 때문에 마침표, 쉼표 등이 없기 때문에이 문장을 치고 있다는 것을 알고 있습니다. 나는() 및 {} 문자를 이스케이프 처리했지만 문자로 대체되지 않았습니다. 내가 오라클 설명서를 사용하여 자신을 정규식을 가르치려고 노력했지만, 왜 이것이 작동하지 않습니다 이해할 수없는 것.

+0

입력 및 출력 샘플을 보여줘야합니다. –

+0

문제는 제가 문제가있는 텍스트를 포함시키지 않을 것입니다, 그것은 코드로 인식하고 있었기 때문에 여기에 문제의 텍스트가 있습니다. 출력은 입력과 동일하게 나옵니다. ** 우리는 가석방에 살고있는 깜둥이들을 위해 (내 거리 모퉁이에서 유리에 금을 넣었습니다.) {우리는 항상 그것을 할 것입니다} 잠긴 경우에도 {우리는 여전히 그럴 겁니다} (블록에있는 오래된 총들) {우리는 여전히 그걸해라} 이웃 경찰들에게 {우리는 여전히 그걸해라} {우리는 여전히 해내 라, 우리는 항상 그렇게한다} ** –

답변

5

이 정규식 아포스트로피을 제외한 모든 문장 부호를 표시합니다

[\p{P}&&[^\u0027]] 

정규식의 자바 문자열 :

"[\\p{P}&&[^\u0027]]" 
+1

이 질문은 이중 따옴표 나 NUL이 아닌 '\ x27'인 아포스트로피를 제외하도록 요청한다는 것을 제외하고는 완벽 할 것입니다. – VGR

+0

@VGR 고마워요, 고쳐 줬습니다 – Andie2302

+0

당신은 한 걸음 더 나아가'''문자를 정규 표현식에서 직접 사용할 수 있습니다. 이해하기 쉬워야합니다. – VGR

1

제거하려는 모든 단일 문자를 구체적으로 지정하는 대신, 반대쪽을 수행하고 허용 할 상태를 지정하고 앞에 접두사를 붙이지 않는 이유는 무엇입니까?

holdMe = holdMe.replaceAll("[^a-zA-Z0-9'\\s]+"," "); 

" "와 공백, 영숫자, 아포스트로피 이외의 모든 것을 대체합니다.

+0

다른 \를 추가하여 \ s를 이스케이프 처리 할 수 ​​있지만이 스 니펫의 {} 및() 문자는 여전히 대체되지 않습니다. –

1

확인이 :

public static void main(String[] args) { 
     /* use \\ (double) before { } [ ] */ 
     String m = "this:{[]}/; is a test".replaceAll("[\\[\\]\\{\\}\\/,_\"-.!?:;)(]", " "); 
     System.out.println(m); 
    } 

출력 :

this  is a test