我有以下格式的文本:
ERR_OUT_OF_MEM, "ERR OUT OF MEM"
ERR_SOMETHING_BAD, "ERR SOMETHING BAD"
我想用下划线替换文本中引号内的所有空格:
ERR_OUT_OF_MEM, "ERR_OUT_OF_MEM"
ERR_SOMETHING_BAD, "ERR_SOMETHING_BAD"
我能想到的最好的正则表达式是:
\("\w\+\)\@<=
(最后有一个空格)
但这只能找到每个带引号的字符串中的第一个空格,我需要多次重复此操作才能获得所需的效果。
有什么办法可以一次性完成吗?
Thanks!
当然有一种 0 长度模式可以一次性工作,但由于我使用它们从未取得过太大成功,所以我更喜欢这种方法:
:%s/\%("[^"]*"\)*\("[^"]*"\)/\=substitute(submatch(1), ' ', '_', 'g')/g
注意:双引号保持 2 乘 2 分组,以免发生转换
foo bar "foo bar" "foo barr"
into
foo bar "foo_bar"_"foo_barr"
编辑:正如 Rampion 指出的那样,以下内容就足够了:
%s/"[^"]*"/\=substitute(submatch(0), ' ', '_', 'g')/g
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)