Vim正则表达式删除冒号和空格或换行符之间的所有内容

时间:2017-01-04 02:45:45

标签: regex vim

我正在尝试使用vim正则表达式删除冒号:和空格或换行符之后的所有内容。以下是我正在使用的文字。

ablatives       ablative:ablative_A s:+PL
abounded        abound:abound_V ed:+PAST
abrogate        abrogate:abrogate_V
abusing ab:ab_p us:use_V ing:+PCP1
accents'        accent:accent_N s:+PL ':+GEN
accorded        accord:accord_V ed:+PAST

所以我想从中得到以下内容:

ablatives       ablative s
abounded        abound ed 
abrogate        abrogate
abusing ab us ing
accents'        accent s '
accorded        accord ed

我很遗憾这个,但我确实尝试了以下声明:

:s/\:. / /g

我正在尝试使用它来获得至少一种我需要的模式。

3 个答案:

答案 0 :(得分:2)

简单,您可以:

:%s/:\S*//g
  

\S 非空白字符;

答案 1 :(得分:0)

这似乎给出了你想要的结果:

:%s/:.\{-}\([ \n]\)/\1/g
  • : - 文字:。我不确定你为什么在你的问题中逃脱了,因为你不需要。
  • . - 任何角色。
    • \{-} - 尽可能少地重复零次或多次(“ungreedy”,如许多其他正则表达式引擎中的*?)。
  • \( - 在替换模式中为参考启动新的子组。
    • [ - 开始“匹配任何这些字符。
      • - 文字空间。
      • \n - 换行。
    • ] - 结束[
  • \) - 结束小组。

在替换模式中,我们使用\1插入空格或换行符,具体取决于我们替换的内容。

您还可以使用\_s代替[ \n],这将匹配所有空格,制表符和换行符。我个人更喜欢[ \n],因为它在regexp引擎中更容易移植(而\_s是一个特定于Vim的构造)。

有关上述任何内容的详情,请参阅:help <atom>

答案 2 :(得分:0)

:%s/:[^ ]*//g

删除:后跟零个或多个非空格字符。行尾的换行符不会受到影响