原始文字就像
a = a +" a + b" + c +" a + b" + c
如何在vim中使用regex存档以下结果:
a = a - " a + b" - c - " a + b" - c
a = a +" a - b" + c +" a - b" + c
我尝试使用懒惰或贪婪的乘数来寻找后视并逐步获取结果。但是,我想知道这些是否是对这种情况的一般性陈述,可以使替换清晰而美观。
谢谢
答案 0 :(得分:1)
在vim中尝试几个命令:
第一个:
s/\zs+\ze\s*"\|"\s*\zs+\ze/-/g
为第二个:
s/"[^+"]*\zs+\ze[^+"]*"/-/g
答案 1 :(得分:0)
1.: \+(?=(?:[^"\n]*"[^"\n]*")*[^"\n]*$)
2.: \+(?=(?:[^"\n]*"[^"\n]*")*[^"\n]*"[^"\n]*$)
这个想法很简单:只有在背后有均匀/不均匀数量的引号时才匹配+
。
第一种模式的解释:
\+ // match "+"
(?= // assert there's an even number of quotes left
(?:
[^"\n]*" // consume one quote, and all text in front of it...
[^"\n]*" //...twice
)* //...as often as possible
[^"\n]*$ // finally, assert there's no more quotes in this line.
)
答案 2 :(得分:0)
\+(?=(?:[^"]*"[^"]*")*[^"]*$)
这将是针对第一种情况。如果在+
和"
之间,请排除"
。请参阅演示。
http://regex101.com/r/nA6hN9/44
\+(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)
这将是第二种情况。如果在"
abd "
之间。
参见演示。