2012-12-07 5 views
1

정규식이 좋지 않아 문자열 교체에 도움이 필요합니다.문자열 replaceAll에 조건이 있습니다.

String str = "Name_XYZ_"; 
     str = "XYZ_NAME_"; 

그래서 어떻게 빈 문자열을 가진 두 개의 문자열 위에서 "Name_" 또는 "_NAME_" 대체 할 수있다? 조건은 "Name"이 될 수 있으며 또는 임의의 색인이지만 preceded by "_" 일 수 있습니다.

은 지금까지 나는

String replacedString = str.replaceAll("(?i)Name_", ""); // This is not correct. 

이 숙제 아닌, 노력했다. 나는 그런 종류의 처리가 필요한 XML 파일 작업을하고있다.

답변

1
String replacedString = str.replaceAll("(?i)(?:^|_)name_", ""); 

당신이 가까이있었습니다. 당신이해야 할 일은 입니다anchorname 문자열의 시작 부분에 (^) 또는 밑줄이 필요합니다. 또한 Namename으로 변경했습니다. 어쨌든 대소 문자를 대문자로 처리하는 이유는 왜 대소 문자가 혼합 되었기 때문입니까? ?:은 최적화에 불과하며 좋은 습관입니다. 이 경우에는 필요하지 않은 capturing을 표시하지 않습니다.

정규 표현식 기술을 향상 시키려면 this tutorial을 적극 권장 할 수 있습니다.

+0

고마워요. 이 작동합니다. – user1483570

+0

나는했다. 나는이 답변을 투표했을 지 모르지만 그렇게 할 평판은 없다. 고마워. – user1483570

-1

저는 Java 대신 .NET의 정규식을 사용하지만 그 문맥에서는 (_?Name_)이 작동합니다.

+0

문자열의 어딘가에 '_'이 없으면 (양쪽 언어 모두에서)'Name'도 제거됩니다. –