2011-04-26 4 views
2

두 번째 문자에서 마지막 문자 인 .word\까지 줄의 모든 텍스트를 삭제하려고합니다. (도트 삭제) 도트 앞에 \이 없을 수 있습니다. 도트 앞에 \이 있으면 이전 .word\ 패턴까지 삭제하십시오.
^\w\zs.*[^\]\.\ze\w\+\\\s.*$
하지만 내가 뭘 잘못했는지VIM : Regex zs ze 문제

작동하지 않습니다

나는이 간단한 정규식을 만들어?

.word\까지 삭제하고 싶지 만 2 번째 .word\ 패턴까지 삭제하지 않으려면 어떻게해야합니까?

데이터 :
nnoremenu <silent> 97.330.10 &Sort.Reverse\ Characters.Reverse\ Characters\ in\ Line\ Hor\ -[A]<Tab>sihT\ si\ ym\ txet\.\
nnoremenu <silent> 97.330.11 &Sort.Reverse\ Characters.Reverse\ Characters\ in\ Line\ Hor\ Reverse\ -[A]<Tab>\.txet\ ym\ si\ sihT\

가되어야합니다
n Reverse\ Characters\ in\ Line\ Hor\ -[A]<Tab>sihT\ si\ ym\ txet\.\
n Reverse\ Characters\ in\ Line\ Hor\ Reverse\ -[A]<Tab>\.txet\ ym\ si\ sihT\

+2

일부 예제 데이터가 유용 할 수 있습니다. – johnny

+3

일부 데이터는 의무 사항입니다. 우리는 (검증 된) 잘못된 정규 표현식을 읽고 그 불완전한 설명으로 무엇을 의미하는지 짐작할 수 없습니다. – sehe

+0

@johnny, @sehe, 위에 올려주세요 – Reman

답변

2

당신은 사용해야 최종 \s가 마지막 백 슬래시 뒤에 공백이 필요하다는 의미

:%s/^\w\zs.*\\\@<!\.\ze\w\+\\\s 

참고.

\@<! 도우미는 lookbehind negative assertion (:help /\@<! 참조)을 의미합니다.

마지막으로 .*$은 쓸모가 없습니다.

+0

감사합니다. 그게 내 첫 번째 질문을 해결했습니다. 우리의 정규식은 항상 최신 패턴'w \ + \\ s'를 선택하고, 두 번째 패턴을 선택하는 코드는 무엇입니까? 체육. 텍스트에서 2 개 이상의 공백을 찾기 위해 검색을하면 '^ [a | v | n]. * \ (\ s \ {2,} \) \ {1}'이면 한 줄에 마지막으로 2 개 이상의 공백을 찾습니다. 한 줄에 처음 두 개 이상의 공백을 검색하려면 어떻게합니까? – Reman

+0

사용 :'\ (^. \ {-} \ {2,} \ @ = \) \ @> \ zs'. 이런 것들을 보시려면': help/\ @>'를보십시오. – Benoit

+0

감사합니다. Benoit, 내 질문을 해결했습니다. Btw가 왜 작동하지 않는가?'\ [a | v | n]. * \ (\ s \ {2,} \) \ {1}'은 코드와 같지 않습니까? 귀하의 코드가 작동, 내 코드가 :) – Reman