%:s / \([0-9] * \)_ \(* \)/ \ 2不会重命名文件

时间:2009-07-15 18:01:56

标签: regex vim

有人可以编辑%:s/\([0-9]*\)_\(*\)/\2以便我可以重命名文件。例如,如果文件名是5555_word_word.jpg,那么我希望文件名为word_word.jpg。我觉得我太近了!

3 个答案:

答案 0 :(得分:6)

您可能希望简化并只删除前导数字和下划线:

s/^[0-9]+_//

答案 1 :(得分:3)

试试这个:

:%s/\([0-9]*\)_\(.*\)/\2

.将匹配任何字符(第二个分组的一部分),*将贪婪地匹配任意数量。你的原始正则表达式缺少该指令。这也会将_word_word.txt格式的文件重命名为word_word.txt。如果您想要匹配数字(可能是个好主意),请使用:

:%s/\([0-9]\+\)_\(.*\)/\2

\+指令意味着匹配一个或多个实例。

答案 2 :(得分:3)

您的版本没问题,但您忘记了一段时间,您可能应该使用^\<将其锚定到行的开头或字边界。

:%s/^\([0-9]*\)_\(.*\)/\2/

您可以使用\v清除其中一些斜杠。

:%s/\v^([0-9]*)_(.*)/\2/

您可以使用\ze来避免捕获组。

:%s/^[0-9]*_\ze.*//

但尾随.*是多余的,因为它匹配任何东西。所以使用Seth的版本,这是最简单的。