如何用一些文本替换 VIM 中的捕获组 2

use*_*838 5 regex vi vim

我正在使用下面的正则表达式将 abc1,cde2,efg3 替换为 hello 但不知何故它不起作用

 :%s/\(\d\{2}:\d\{2}:\d\{2\}\s\)\([A-z0-9]*\)/hello/gc
Run Code Online (Sandbox Code Playgroud)

3 月 17 日 02:25:01 abc1 micro:开始 use.slice。

Mar 17 02:25:01 cde2 micro:开始使用.slic

3 月 17 日 02:25:01 efg3 micro:开始使用.slic

anu*_*ava 8

您可以在vim以下位置使用此替代命令:

%s/\v(\d{2}:\d{2}:\d{2}\s+)[a-zA-Z0-9]+/\1hello/g
Run Code Online (Sandbox Code Playgroud)
  • 这里\v用于避免按照旧 BRE 语法进行转义的非常神奇
  • \1 是捕获组 #1 的反向引用

  • @GillesQuenot `\v` 意味着您不必转义所有具有特殊含义的字符,请参阅 http://vimdoc.sourceforge.net/htmldoc/pattern.html#/\v 。我确信 Perl 具有一些 Vim 没有的正则表达式功能。 (2认同)