2012-04-08 2 views
2

어제 전 텍스트에서 ()을 모두 대체하려고했지만 이전 검색에서 일치하는 문자는 찾지 않았습니다. 나는 좋은 해결책을 찾지 못했습니다. 나는 그것을 하나씩 변화시켰다.일치하는 문자가 아닌 특정 문자를 대체하십시오.

(Peter Jackson) is the man who..... (John Johnson) is the man who.... 
and (John Johnson) is also the man who.. not as (Jon Johnson) 
more (letters) etc. 

내 검색 패턴 :

이 내 원래 텍스트입니다 /(\a*\sJohnson)
I 텍스트의 모든 () 문자를 대체 할 수있는 방법 []에 있지만, 하나는 일치에서 찾을 수 없습니다 ?

결과는 같아야합니다

[Peter Jackson] is the man who..... (John Johnson) is the man who.... 
and (John Johnson) is also the man who.. not as (Jon Johnson) 
more [letters] etc. 

편집
경기에서 하나 또는 그 이상의 어떤 문자 텍스트에 있지만 이들을 대체 할 수있는 쉬운 방법이 있습니까?

+0

을 사용할 수 있습니다. 그게 무슨 뜻이야? – kev

+0

잘 했어. 네, 그것이 제가 의미하는 바입니다. 다음 번에 내가 한 일처럼 빨리 할 수있는 (일반적인) 방법을 찾고 싶습니다. – Reman

답변

1

하나는 문제의 목적을 달성하기 위해 다음과 같은 대체 명령을 사용할 수 있습니다 필요 캡처 그룹을 무시 \%(를 사용합니다. IGNORE가 는 (예를 들어, \a*\sJohnson)를 변경하는 것을 괄호 일치하지 않는 패턴을 나타낸다

:%s/(\(.\{-}\%(IGNORE.\{-}\)\@<!\))/[\1]/g 

.

IGNORE 패턴의 경기를 제외하고 버퍼 곳곳에 대체의 일반적인 문제를 해결하기 위해, 하나는 명령 내가 질문을 편집 한

:%s/\(IGNORE\)\zs\|s/\=submatch(1)!=''?'':'t'/g 
+0

ib,'\ a * \ sJohnson'이 내 검색이라면 텍스트의 모든 문자를'\ a * \ sJohnson'의 공백으로 대체하거나 텍스트의 's'를 모두 't'로 변경하고 싶습니다. 일치하는's' sauf, 정규식은 무엇입니까? – Reman

+0

@ 레몬 : 업데이트 된 답변을 살펴보십시오. 내가 추가 한 명령이 문제를 해결한다면 (나는 그것이 올바르게되어 있는지 확신 할 수 없다), 나는 그 설명을 자세히 설명 할 것이다. –

+0

ib, 감사합니다.나는 성공하지 못하도록 코드를 시도했다. 채우기 p.e. 3 행을'a' 문자로 바꾸고'try'를 줄 안에 넣고 ('텍스트 무시 ') 모든'r'을'b'로 대체하십시오. 나는 그것을 작동하게 만들 수 없다. 어쩌면 내가 뭔가 잘못했을 수도 있습니다. – Reman

2

이 작동 할 수 있습니다 : 당신은 \@! (Negative Lookahead)를 사용할 수 있습니다

:%s/(\(\a*\sJohnson\))/LEFTPARENT\1RIGHTPARENT/g 
:%s/(/[/g 
:%s/)/]/g 
:%s/LEFTPARENT/(/g 
:%s/RIGHTPARENT/)/g 
3

:

:%s/(\%(\a*\sJohnson\)\@!\([^)]*\))/[\1]/g 
    ->|............|<--- 
  • \%(...\)\@!Negative Lookahead이다.
  • \([^)]*\))을 제외한 모든 항목과 일치합니다.
  • 나는 그렇지 않으면 /[\2]/
+0

좋았어. 내가했던 것처럼 훨씬 쉬울거야.하지만 너는 어떻게해야 될까. 텍스트에있는 모든 "s"를 제외하고 성냥에있는 것을 제외합니다. – Reman

관련 문제