vim regex删除所有包含将在单词末尾包含某个字符的单词

时间:2018-07-31 04:25:14

标签: regex vim

我正在尝试清理文本文档,并从文档的每一行中删除某些单词(如果其中包含标记(X)。因此,对于以下行:

Adäë ee tee tdX hnX dedas ödaX.

然后将成为:

Adäë ee tee dedas.

字母的字符为a, e, i, o, u, ë, ä, ö, t, d, n,因此不包括X。同样,标记X将始终是要删除的单词中的最后一个字符。我曾尝试修改here中的语句,但无法使其正常工作。

2 个答案:

答案 0 :(得分:0)

VIM完全替换命令是这样的:

:%s/before/after/g

其中

  • %s是替代物
  • 之前是要匹配的字符串
  • 之后就是替换
  • g是全局标志(用于替换所有出现的事件)

对于您的问题,您可以使用

:%s/\s*\<\S\+X\>//g

其中

  • \ s *将匹配所有空格(0或更多)
  • \ <与单词边界匹配
  • \ S \ +匹配所有非空格(1个或更多)
  • 您的疑问词X应该以X结尾
  • >与单词边界结尾匹配
  • //字符串为空之后
  • g是全局替换

答案 1 :(得分:0)

您可能要尝试:

:%s/\s*\S*X\([aeiouëäötdn]\)\@!//g

它会遍历所有行,并删除以X结尾的单词及其前导空格。断定前瞻可以断言X之后的下一个字母不是字母。