如何将这两个正则表达式合并为一个?

时间:2014-03-10 05:02:33

标签: regex vim

我正在使用这个删除所有空格:

%s/\s\+//g

这个用双引号括起逗号分隔的单词(并在逗号后留一个空格):

%s/\s*\([^,]\+\)/ "\1"/g

我试着像这样合并它们:

%s/\s\+//\|/\s*\([^,]\+\)/ "\1"/g

但我收到Trailing Characters错误。

如何正确合并这两个正则表达式?

3 个答案:

答案 0 :(得分:3)

您无法将两个正则表达式合并为一个,因为替换部分不同。

您可以使用|组合这两个命令。

尝试:

%s/\s\+//g|%s/\s*\([^,]\+\)/ "\1"/g

答案 1 :(得分:3)

由于替换部分不同,您必须使用:help sub-replace-expression来区分两个正则表达式部分,并删除或双引号,如下所示:

:%s/\s\+\|\s*\([^,]\+\)/\=empty(submatch(1)) ? '' : ' "'.submatch(1).'"'/g

但这仍然没有意义,因为删除尾随空格只有在它已被双引号之后才会出现。由于这两个替换不相关,所以您应该只使用|命令分隔符连接这两个命令(在映射中,您将使用<Bar>代替):

:%s/\s\+//g|%s/\s*\([^,]\+\)/ "\1"/g

答案 2 :(得分:2)

你可以使用(|)或符号

试试这个正则表达式

%s/\s\+//g|%s/\s*\([^,]\+\)/ "\1"/g