Vim正则表达式只替换日期时间

时间:2017-09-18 18:32:16

标签: regex vim

我想用每个行中的日期时间字符串替换每一行。

输入

D­¬ng ThÞ Anh 19/02/1992 TH12B 10.0 5.0
La C«ng TuÊn Anh 30/01/1995 TH12A 8.5 6.5
NguyÔn §øc Anh 14/10/1995 TH12B 10.0 5.5
Ph1m Tïng Anh 10/04/1994 HTTT11 1.0 4.5

输出

19/02/1995
30/06/1995
14/11/1995
10/03/1994

我尝试使用以下命令:

:'<,'>s/[^=\d{2}\/\d{2}\/\d{4}]/ /g

但是有些不对劲。

我需要更改以使命令有效吗?

2 个答案:

答案 0 :(得分:2)

你不能简单地否定&#34;否定&#34;正则表达式;对于某些情况,可以写入反转模式,但这不是一般解决方案。

相反,您必须匹配整行捕获要保留的文本。在:substitute的替换部分中,只需引用已捕获的组(\1)即可。这是一种常见的模式:

%s#.*\<\(\d\+/\d\+/\d\+\)\>.*#\1#

注意:我在这里使用了#分隔符,以避免模式中出现/的转义。

答案 1 :(得分:0)

只需寻找

\d{2}/\d{2}/\d{4}

并替换线条。请参阅a demo on regex101.com