我有一些文本,其中某些行包含在字符串中正确转义的双引号,而其他行则没有,例如:
bla1 "aaa"bbb"ccc" bla1
bla2 "aaa\"bbb\"ccc" bla2
替换后的结果应该是:
bla1 "aaa\"bbb\"ccc" bla1
bla2 "aaa\"bbb\"ccc" bla2
但不包括:
bla1 "aaa\"bbb\"ccc" bla1
bla2 "aaa\\"bbb\\"ccc" bla2
换句话说,它应该转义那些没有被转义的双引号,并且不要触碰已经被正确转义的行。目前,我用下面的方法得到了第二个结果。
%s:\(\s".\+\)\(".\+\)\(".\+"\s\):\1\\\2\\\3:g
然后我尝试使用负回顾后断言来告诉引擎,在引号前面有反斜杠的情况下不匹配。
(?<!\) which in vim should be something like @<!\
%s:\(\s".\+\)\@<!\\\(".\+\)@<!\\\(".\+"\s\):\1\\\2\\\3:g
但我想我有点迷失了。
注意:
每行只有一个此类字符串
该字符串被双引号包围,内部可以包含双引号 - 只有内部的双引号需要转义