我有以下格式的文字:
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\+\)\@<=
(那里有一个空间)
但这只能找到每个引用字符串中的第一个空格,我需要多次重复这个空格才能获得所需的效果.
有什么方法可以一次性完成吗?
谢谢!
肯定有一个0长度模式可以一次通过,但由于我从未使用它们取得太大成功,我更喜欢这种方法:
原文链接:/bash/384436.html:%s/\%("[^"]*"\)*\("[^"]*"\)/\=substitute(submatch(1),' ','_','g')/g
注意:双引号保持2对2分组,以便不进行转换
foo bar "foo bar" "foo barr"
成
foo bar "foo_bar"_"foo_barr"
编辑:正如猖獗指出的那样,以下绰绰有余:
%s/"[^"]*"/\=substitute(submatch(0),'g')/g