在逗号之间,句子的开头,中间或结尾处替换单词

时间:2014-07-29 08:29:47

标签: regex vim

我有一个文件,其中一些单词用逗号分隔。我想删除其中一个单词,同时保持正确的逗号结构。

示例:

dan,brian,max
brian,dan,max
brian,max,dan

如果“dan”在行的开头,则应取出后续逗号。 如果他在线的中间,应该取出其中一个逗号。 如果他在行尾,则应取出前面的逗号。

所以最终输出是:

brian,max
brian,max
brian,max

到目前为止,我已经完成了两个正则表达式,但我确信有一种方法可以在一行中完成。

%s/^\@!\(,\)\?dan\(,\)\?/\2/ | %s/^dan,//

编辑:

可以这样做,但在我看来,这就像是一种迂回的方式。

%s/^\@!\(,\)\?dan\(,\)\?\|^\(dan,\)/\2

3 个答案:

答案 0 :(得分:4)

你需要的正则表达式只是:

^dan,|,dan\b

请参阅live demo

诀窍是捕获中间案例的前导逗号,使其与中间和最终案例相同。

作为替换命令:

%s/^dan,\|,dan\>//g

注意:如果vim不支持单词边界\b,请将其删除

答案 1 :(得分:2)

你也可以试试这个,

%s/\<dan,\|,dan$//g

答案 2 :(得分:0)

      re.sub(r"[,]+dan|dan[,]+","",x)

用空白代替丹。