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

3

我希望你能替换每一行,用每个行内的日期时间字符串。

输入

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

但是有些问题。

我需要改变什么才能使命令生效?


不太花哨但这会起作用 %s/\v.{-}(\d+\/\d+\/\d+).*$/\1 - Lieven Keersmaekers
1
为了避免使用大量反斜杠,我们可以使用另一个分隔符: :%s,\v.{-}(\d+/\d+/\d+).*$,\1 - SergioAraujo
2个回答

2

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

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

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

注意:我在此处使用#分隔符以避免模式中出现的/被转义。


0

1
我想保留日期时间字符串。如果按照你的正则表达式,日期时间字符串会被替换掉。我错了吗? - Duong Bach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接