我正在尝试使用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
我正在尝试使用它来获得至少一种我需要的模式。
答案 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
删除:
后跟零个或多个非空格字符。行尾的换行符不会受到影响