正则表达式 - 将文件重命名为文件名中的最高分辨率
Posted
技术标签:
【中文标题】正则表达式 - 将文件重命名为文件名中的最高分辨率【英文标题】:Regex - Renaming file to highest resolution in filename 【发布时间】:2020-05-24 09:43:13 【问题描述】:我正在使用名为 Advanced Renamer 的应用程序来重命名我的视频文件。我尝试通过选择可用的最高质量来重命名视频文件,这是在当前文件名本身中指定的。
例如,原始未更改的文件名如下所示:1080P,720P,480P,240P,_123456789.mp4
我正在使用正则表达式将此示例文件重命名为:1080P_123456789.mp4
。
但是,我现在使用的正则表达式的结果 .*(?=1080P|720P|480P|240P)
无法正常工作,它采用的是最低质量而不是最高质量:240P,_123456789.mp4
正确的例子:
1080P,720P,480P,240P,_0987654321.mp4 --> 1080P_0987654321.mp4
720P,480P,_0987654321.mp4 --> 720P_0987654321.mp4
480P,240P,_0987654321.mp4 --> 480P_0987654321.mp4
我的正则表达式给了我错误的例子:
1080P,720P,480P,240P,_0987654321.mp4 --> 240P_0987654321.mp4
720P,480P,_0987654321.mp4 --> 480P_0987654321.mp4
480P,240P,_0987654321.mp4 --> 240P_0987654321.mp4
编辑:解决方案
^.*?(1080P|720P|480P|240P).*?(_\d+\.mp4).*$
OR
^.*?(\d+P).*?_(\d+\.mp4)\S*
OR
.*?(\d+P)[^.]*_(\d+\.mp4)\S*
【问题讨论】:
【参考方案1】:试试这个^(1080P|720P|480P|240P).*,(.*)
。 ^
将匹配该行中的第一次出现。
【讨论】:
感谢您的评论。我在@thefourthBird 的回答下方回复了 我在@TheFourthBird 的答案下方发表了我的评论。感谢您发布解决方案!【参考方案2】:对于当前的示例数据,您可以捕获捕获组中的第一次出现,因为它是最高值。
然后匹配除下划线以外的任何字符,然后使用否定字符类后跟下划线以确保它存在。
\b(\d+P)\b[^_]*_
说明
\b
字边界
(\d+P)
捕获组 1,匹配 1+ 个数字和 P
\b
字边界
[^_]*_
匹配除_
之外的任何字符0+ 次,然后匹配_
Regex demo
在替换中使用第一个捕获组,后跟匹配的下划线,该下划线是匹配的一部分,但不存在于捕获组中。
如果您还想删除数字和P
之前和.mp4
之后的特定数字:
^.*?(1080P|720P|480P|240P).*?(_\d+\.mp4).*$
Regex demo
在替换中使用两个捕获组$1$2
【讨论】:
感谢您和@eraklon 的回复!两个答案都有效,但如果在分辨率之前和文件扩展名之后还有更多字符怎么办?然后两个答案都不起作用,所以我试图混合两个正则表达式来得到我想要的,但没有运气。也许有人可以看到这个正则表达式有什么问题,因为我看不到它。 regex101.com/r/2ccGgb/5 @Johanthan 你是这个意思吗?.*?(\d+P)[^.]*_(\d+\.mp4)\S*
regex101.com/r/JNlOzX/1或者这样^.*?(\d+P).*?_(\d+\.mp4)\S*
regex101.com/r/GkGuuj/1
@Johanthan 请注意,单词边界\b
在数字和下划线之间不匹配。我已经更新了答案。
非常感谢你们,你们都发布了正确的解决方案!我已经更新了我的第一篇文章并添加了解决方案。你们发布的三个正则表达式正在工作。非常感谢,也感谢您的快速回复!
很高兴我们能帮上忙! :)以上是关于正则表达式 - 将文件重命名为文件名中的最高分辨率的主要内容,如果未能解决你的问题,请参考以下文章