문제

파일에서 다음 형식의 정규 표현식과 일치하는 텍스트를 찾고 싶습니다. [A-Z] (즉, 일치 그 뒤에 대문자와 또 다른 일치 항목이 옵니다. , 일치하는 텍스트를 대문자가 소문자로 변환합니다.예를 들어, 정규 표현식의 경우 x[A-Z]y

xAy

된다

xay

그리고

xZy

된다

xzy

이맥스' query-replace 함수는 역참조를 허용하지만 AFAIK는 일치하는 텍스트를 변환하지 않습니다.이 작업을 수행하는 내장 함수가 있나요?내가 사용할 수 있는 짧은 Elisp 기능을 갖고 있는 사람이 있나요?

업데이트

@Marcel Levy는 다음과 같이 말했습니다. \, 대체 표현식에는 (임의의?) Elisp 표현식이 도입됩니다.예를 들어 위의 문제에 대한 해결책은 다음과 같습니다.

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
도움이 되었습니까?

해결책

그것은 다음과 같습니다 스티브 예게 실제로 이미 몇 년 전에 이에 대한 답변을 게시했습니다. "빛나고 새로운:이맥스 22." "대체 문자열의 대소문자 변경"까지 아래로 스크롤하면 다음을 사용하는 그의 예제 코드를 볼 수 있습니다. replace-regexp 기능.

일반적인 대답은 "\,"를 사용하여 다음과 같이 대체 문자열의 일부로 lisp 표현식을 호출하는 것입니다. \,(capitalize \1).도움말 텍스트를 읽어보면 대화형 모드에만 있는 것처럼 보이지만 이것이 가장 필요한 곳인 것 같습니다.

다른 팁

이 경우 qrr의 대안은 매크로를 기록하고 재생하는 것입니다.(isearch-forward-regexp, 문자 선택, downcase-region.) 정규 표현식이 잘못된 경우 즉각적인 피드백을 받을 수 있으므로 즉시 매크로가 더 쉽다는 것을 알았습니다.

매크로를 사용하여 이 작업을 수행할 수도 있지만 정규식의 대체 문자열 내에서 코드를 실행하는 것이 나에게는 매우 직관적이지 않기 때문입니다.배치 스크립트나 매우 빠르게 진행되어야 하는 작업을 작성하는 경우 \를 사용하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top