2014-12-03 6 views
0

안녕하세요. 파일의 문자열을 특별한 방법으로 대체하고 싶습니다.Clojure는 문자열을 정규식으로 바꿉니다.

예를 들어 정규식 # "\ WhideMenu \ W"를 사용하여 hideMenu가 "willHideMenu()"와 같은 텍스트를 반환하지 않도록 "hideMenu()"와 같은 문자열을 찾고 있습니다.

(clojure.string/replace textFile #"\WhideMenu\W" "hideMenu2") 

을 그러나 문제는 지금 너무 TEXTFILE의 첫 번째 공백과 마지막 문자를 대체하는 것입니다 :

그럼 나는이 같은 기능을 대체 사용하고 있습니다. 예를 들어

가있는 경우 : 꽤 논리적이다

functionhideMenu2) 

을하지만 어떻게 내가 첫 번째와 마지막 문자를 잃지 않고 대체 사용하십니까 :

function hideMenu() 

그것은 것인가? 나는 결과로 원하는 :

function hideMenu2() 

답변

1

, 내다을 사용하고 정규식 뒤에 :

(clojure.string/replace textFile #"(?<=\W)hideMenu(?=\W)" "hideMenu2") 

가, 그렇지 않으면 당신은 문자 및 사용과 일치해야합니다 당신이 아마 원하는 것은, 단어 경계 일치는 \b로 표현 그것은 교체에 :

(clojure.string/replace textFile #"(\W)hideMenu(\W)" "$1hideMenu2$2") 
+0

두 번째 해결책은 내 문제에 대해 실제로 잘 작동하는 것처럼 보입니다. – Kingalione

+0

@Kingalione이 두 가지 해결책은 파일의 처음 또는 끝에 직접'hideMenu'에 대해 작동하지 않습니다. 특정 사용 사례와 관련이 없을 수도 있지만 염두에 두어야 할 사항입니다. – xsc

1

\W는 단어가 아닌 문자와 일치하고 ( 그 중 하나입니다. Clojure에서 지원하는 경우

(clojure.string/replace "hideMenu()" #"\bhideMenu\b" "hideMenu2") 
;; => "hideMenu2()" 
+0

또 다른 옵션은 교체에 캡처 그룹을 사용하고 있습니다. $ 0은 캡쳐 전체, 첫 번째 캡쳐 그룹은 $ 1, 두 번째는 $ 2 등입니다. 그래서 'hideMenu() "#"\ b (hideMenu) \ b ""$ 12 ") (clojure.string/replace"function hideMenu => "function hideMenu2()"'. 이 경우에는 경계가 포착되지 않으므로 관련이 없지만 언급할만한 가치가있을 수 있습니다. – NielsK

관련 문제