2009-12-29 4 views
1

특정 항목 목록 끝에있는 일부 문자를 제거해야합니다. 이 문자는 항상 동일 (C, CD, PDF, CPDF, M)이 정규 표현식 내가 그들을 제거 할 수 있어요 : 그러나Java 정규 표현식

str.replaceAll("(C|CD|PDF|CPDF|M)$", ""); 

, 나는이 표현을 반전 할 수 아니에요 : 문자열 끝 부분에있는 경우 이러한 코드 중 하나를 (예 : 나머지 문자열을 제거하여) 분리 할 수 ​​있기를 바랍니다. 나는 노력이 :

str.replaceAll("!(C|CD|PDF|CPDF|M)$", "");

내가 아마 문자열 함수를 사용하여 얻을 수 있지만, 나는 그것이 정규 표현식을 사용 가능 확신합니다.

+3

당신은 '이 표현을 반전'무엇을 의미합니까? 당신은 실제로 무엇을 성취하려고합니까? – AlBlue

+0

그는 그 세트에없는 모든 접미어를 제거하고자하는 것 같습니다. 그러나 그것은 의미가 없으므로 확실하지 않습니다. – SLaks

+0

나는 그가 실제로 제거한 것을 알아 내고 싶다고 말하고 싶다. –

답변

5

이미 일치하는 그룹을 캡처하려면 괄호를 사용하고 있습니다. 이제는 해당 그룹을 참조하십시오.

Matcher m = Pattern.compile("(C|CD|PDF|CPDF|M)$").matcher("165N1JCD"); 
    while (m.find()) { 
     System.out.println(m.group(1)); // prints out "CD" 
    } 
2

같은 조쉬 하이트으로, 정규 표현식을 제외하고 두 부분이

Matcher m = Pattern.compile("(.*)(C|CD|PDF|CPDF|M)$").matcher("165N1JCD"); 
    while (m.find()) { 
     System.out.println(m.group(1)); // prints out "165N1J" 
     System.out.println(m.group(2)); // prints out "CD" 
    } 
0

당신은 특정 그룹 (제거 접미사)를 잡아 매처 클래스를 사용할 수 있습니다 얻고 완전히 대체를 수행 할 수 있도록 그 조작. 또 다른 옵션은 표현식에 두 개의 그룹 즉, 가지고있는 그룹과 다른 그룹에 대한 그룹을 만드는 것입니다. 당신이 매처 클래스를 사용하지 않으려면

0

, 당신은 완전히 대체 고수 할 수

str.replaceAll(".*(C|CD|PDF|CPDF|M)$", "$1");