如何使用 GPRename 的正则表达式功能将匹配的组重新插入到“替换”中?

如何使用 GPRename 的正则表达式功能将匹配的组重新插入到“替换”中?

我一直在使用GP重命名批量重命名文件;这比单独更正每个文件更有效率,但似乎仍然效率较低,主要是因为我不理解所使用的正则表达式语法,或者因为正则表达式实现不完整1

给出以下语法的文件列表:

(01) - title of file1.avi
(02) - title of file2.avi
(03) - title of file3.avi

我尝试使用“替换”(选择正则表达式选项,取消选择区分大小写选项):

(\(\d{2}\))

然后显示预览(假设我尚未指定“替换为”选项):

title of file1.avi
title of file2.avi
title of file3.avi

这很好,显然正则表达式识别出了正确的组((01))。现在,我希望在“替换为”选项中(使用 JavaScript 语法)使用:

$1

(我也尝试使用'$1'和)\1'\1'

这只是为了检查我是否可以访问匹配的组,但似乎不能,正如我所预料的那样,匹配的组被文字替换字符串替换了。

所以,我的问题是:是否可以匹配一组特定的字符(在本例中是括号内的数字),然后将它们插入替换字符串中?因此:

(01) title of file1.avi
(02) title of file2.avi
(03) title of file3.avi

变成:

01 title of file1.avi
02 title of file2.avi
03 title of file3.avi

  1. 绝对地怀疑以前的, 亲自。

答案1

不幸的是,看来你不能;而且这是一个不完整的正则表达式实现的错误。

在所有GPRename 语言环境翻译似乎很明显:

msgstr "不能使用正则表达式的反向引用
       因为 $1 被视为 Perl 变量。”

既然您熟悉 Perl 正则表达式,我可以建议您使用优秀的rename命令行实用程序吗?

  • 总是首先使用-n开关进行预览。
  • 您的正则表达式中有一个拼写错误 - 它应该是\((\d{2})\),并将分组放在转义的括号内。
  • 例子:

    $ 重命名 -n 's/\((\d{2})\)/$1/' *.avi
    (01)文件 1.avi 的标题重命名为 01 文件 1.avi 的标题
    (02)文件 2.avi 的标题重命名为 02 文件 2.avi 的标题
    (03)file3.avi 的标题重命名为 03 file3.avi 的标题
    
  • rename使用(详细)开关进行调用-v并删除-n以实际执行重命名。

答案2

在 GPRename 中,您可以像这样使用正则表达式:

    Name of file 012.txt
    Regular Expression: Name of file (\d).txt
    Replace: NewFileName_1.txt

在哪里:

    1 = like $1

你可以试试。我使用过 \1 或 \$1,但它得到的是 \ 或 \$ 作为简单文本。这很奇怪,但事实就是如此。

相关内容