使用RegEx(批量重命名实用工具)重命名文件,同时在名称中保留日期

w41d8nur  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(143)

我对RegEx很陌生,但自从我开始使用批量重命名实用程序后就对它很感兴趣。我使用过程序中的其他函数,但看到RegEx更复杂,我想看看它是否能更好地解决我的问题。
比如,我有这样日期的视频;

2020-7-3; blah.mp4
2022-08-03_blah.mp4
2013-04-03-20-34-08; blah.mp4

但我希望它们是这样出现的;

2020(07-03)133452_blah.mp4
2022(08-03)143136_blah.mp4
2013(04-03)203408_blah.mp4

其中第一个数字是年,括号中的数字是月/日,最后一位数字是发布的时间戳。我似乎不能使用其他公式/设置(即“修改日期”等),因为许多文件的原始日期已经在重新(重新重新?)编码过程中丢失,所以名称中有OG日期是非常重要的。
有没有办法把名字里的数字取出来,然后重新散列符号,这样它们就可以像我给的例子一样显示出来?有没有办法在一个表达式里完成这一切?提前感谢:)
我还没怎么试过我对RegEx还是个新手......我将永远感激任何能帮助我通过这个例子来学习它的人。

ztigrdn8

ztigrdn81#

您正在寻找的正则表达式构造是命名组((?'groupname'abc))。稍后在替换时,您可以使用命名组来指定匹配($groupname)。
为了便于阅读,我建议两个步骤:首先在单个数字前添加一个零(如原始示例中的7和3),然后将文件名重新格式化为所需的形状。

    • 添加零**:我认为这是困难的部分。我们需要多个不同的正则表达式结构。lookaheads (?=foo),lookbehinds (?<=bar),conditional (?(foobar))和命名组(?'groupname')
      • LookaheadLookbehind**是零长度Assert(它们不直接匹配),用于Assert匹配项后面或前面有另一个匹配项。例如,表达式(?<=bar)\d转换为匹配前面有单词bar的数字。
      • 条件**如果?:(foo)表达式匹配,则(?:(foo) foo| bar)将匹配|之前的部分。
      • 命名组**将为匹配项提供可用于替换的名称。例如,(?'name')可用于使用$name的替换过程。

考虑到这一点,我发现完成替换的表达式是this one/(?<=-)(?(?=\d{2})|(?'oneLetter'\d))(?=\D)/gm)。

    • 对于重组部分**我找到了另一个表达式,可以用来得到你想要的文件名形状。here。我用来匹配文件名的表达式是(?'year'\d{4})-(?'month'\d{1,2})-(?'day'\d{1,2})(.*.mp4)\d匹配一个数字,花括号中的数字指定你想要匹配多少个数字。末尾的.*匹配到行尾为止的所有内容。然后,您可以使用$year\($month-$day\).mp4来使用命名的组以获得您指定的文件名形状。

我希望这个例子能有所帮助!

相关问题