我对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还是个新手......我将永远感激任何能帮助我通过这个例子来学习它的人。
1条答案
按热度按时间ztigrdn81#
您正在寻找的正则表达式构造是命名组(
(?'groupname'abc)
)。稍后在替换时,您可以使用命名组来指定匹配($groupname
)。为了便于阅读,我建议两个步骤:首先在单个数字前添加一个零(如原始示例中的7和3),然后将文件名重新格式化为所需的形状。
(?=foo)
,lookbehinds(?<=bar)
,conditional(?(foobar))
和命名组(?'groupname')
。(?<=bar)\d
转换为匹配前面有单词bar的数字。?:(foo)
表达式匹配,则(?:(foo) foo| bar)
将匹配|
之前的部分。(?'name')
可用于使用$name
的替换过程。考虑到这一点,我发现完成替换的表达式是this one(
/(?<=-)(?(?=\d{2})|(?'oneLetter'\d))(?=\D)/gm
)。(?'year'\d{4})-(?'month'\d{1,2})-(?'day'\d{1,2})(.*.mp4)
。\d
匹配一个数字,花括号中的数字指定你想要匹配多少个数字。末尾的.*
匹配到行尾为止的所有内容。然后,您可以使用$year\($month-$day\).mp4
来使用命名的组以获得您指定的文件名形状。我希望这个例子能有所帮助!