昨天我尝试在我的文字中替换所有(
)
,而不是在之前搜索的匹配中找到的(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)
。我找不到一个好的解决方案。我一个接一个地改变了。
这是我原来的文字:
(
我的搜索模式: )
如何将文本中的所有[
]
字符替换为[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.
{{1}},而不是匹配中找到的字符?
结果应为:
{{1}}
修改
是否有一种简单的方法可以替换文本中的一个或多个字符而不是匹配中的这些字符?
答案 0 :(得分:3)
您可以使用\@!
(Negative Lookahead):
:%s/(\%(\a*\sJohnson\)\@!\([^)]*\))/[\1]/g
->|............|<---
\%(...\)\@!
是Negative Lookahead
。\([^)]*\)
将匹配除)
以外的所有内容。\%(
忽略已捕获的群组,否则您需要/[\2]/
答案 1 :(得分:2)
这可行:
:%s/(\(\a*\sJohnson\))/LEFTPARENT\1RIGHTPARENT/g
:%s/(/[/g
:%s/)/]/g
:%s/LEFTPARENT/(/g
:%s/RIGHTPARENT/)/g
答案 2 :(得分:1)
可以使用以下替换命令来实现此目的 问题
:%s/(\(.\{-}\%(IGNORE.\{-}\)\@<!\))/[\1]/g
其中IGNORE
指定括号中不匹配的模式
要改变(例如\a*\sJohnson
)。
为了解决在缓冲区中到处替换的一般问题
除了IGNORE
模式的匹配之外,可以使用命令
:%s/\(IGNORE\)\zs\|s/\=submatch(1)!=''?'':'t'/g