正则表达式帮助:使用“更好的查找器重命名”重命名和重新排列文件名

时间:2018-10-04 11:23:06

标签: regex

我有很多文件需要多个tweek(重新命名和重新排列)。 宁可一口气发布整个流程,我认为单独发布以显示流程更有用。

我正在使用“更好的查找器重命名”中的替换和重新排列功能,但我认为它使用的正则表达式代码是标准的吗?

我通过测试得出的一个小工作示例:

Pattern: (\d{6})_(\w{4,5})_(.*)_(.*)_(\d{6}).pdf
Substitute: $1_$5_Thankyou_$2_0.pdf

但是我确实需要基于正则表达式的代码来完成下面列出的全部任务。 当我刚开始学习它时,我的大脑就变成了结。

2个示例文件名:
137307_DEICR_(F)_Claybrook Road的5C Golding House公寓_180914.pdf
137430_DEIC_(S)_Flat 14B Golding House,Claybrook Road_180910.pdf
116486_EICR_(S)_Osler Road Ivy Lane 20号楼_180920.pdf
116508_EIC_(S)_Fisher Ivy Lane 26,Osler Road_180921.pdf
152270_Flat 23 Ivy Lane Flats,Osler Road OX3 9DT_180921_WTD.pdf
152270_Flat 23 Ivy Lane Flats,Osler Road OX3 9DT_180921_FWR.pdf
147278_DEICR_94_Wellington_Road_160622(147278-A2Dominion1).pdf
147279_DEICR_94_Wellington_Road_160621.pdf(1d7278-A1Dominion1)

所需的转换文件名是:
137307_180914_Thankyou_EICR_0.pdf
137430_180910_Thankyou_EIC.pdf <-已编辑删除了“ _1”
116486_180920_Thankyou_EICR_1.pdf
116508_180921_Thankyou_EIC.pdf <-已编辑,已删除“ _1”
152270_180921_Thankyou_WTD.pdf
152270_180921_Thankyou_FWR.pdf
147278_160622_Thankyou_EICR.pdf
147279_160621_Thankyou_EICR.pdf

所以要分解
要更换
“(F)”变成“ _0”
“(S)”变为_1
“ DEICR”成为“ EICR”
“ DEIC”变成“ EIC”
注意:完成上述步骤后:“ _ EIC_1”变为“ _EIC”
地址(例如“奥斯勒路(Isler Road)常春藤巷20号楼”)变成一个单词(例如“谢谢”)
文件末尾方括号中的所有字符,例如“((147278-A2Dominion1).pdf””或(.pdf(1d7278-A1Dominion1)。

要重新构建
“ _0”已移到文件末尾
_1“已移到文件末尾
“ EICR”,“ ECI”,“ WTD”,“ FWR”移到文件末尾(不在“ _1”或“ _01”之后)
文件末尾的6位“ YYMMDD”日期移到最前面(前6位代码后)

日期格式
另外。是否有代码将日期格式从YYMMDD(例如“ 160622”)更改为DDMMYY“ 220616”(也作为单独的步骤)。

1 个答案:

答案 0 :(得分:1)

您不能一步一步完成替换,因为您需要将(F)转换为_0,但需要将(S)转换为_1,但是您可以在多个重命名步骤,因为文件名模式与替换文件名不同:

  1. 将所有(F)文件重命名为_0.pdf

模式:     ^(\d{6})_D?([A-Z]+)_\(F\)_(.*)_(\d{6}).pdf$

替代: $1_$4_Thankyou_$2_0.pdf

  1. 将所有(S)个文件重命名为_1.pdf

模式:     ^(\d{6})_D?([A-Z]+)_\(S\)_(.*)_(\d{6}).pdf$

替代: $1_$4_Thankyou_$2_1.pdf

  1. 重命名所有“非D”文件,如上所示:

模式:     ^(\d{6})_(.*)_(\d{6})_(WTD|FWR).pdf$

替代:     $1_$3_Thankyou_$4.pdf

这三个步骤应该就足够了。

将日期格式从YYMMDD更改为DDMMYY是一种危害人类的可怕罪行。这样做将防止文件名按时间顺序排序。如果您不愿意这样做,请使用以下表达式对Thankyou文件执行此操作:

模式:^(\d+_)(\d\d)(\d\d)(\d\d)_(Thankyou_.*).pdf 替代:$1$4$3$2_$5.pdf

正则表达式捕获YY,MM和DD部分并重新排列它们。

要删除括号中的内容,请使用以下正则表达式:

模式:^(\d{6})_D?([A-Z]+)_(\d+)_(.*)_(\d{6})(\s*\(.*\)\s*)\.pdf$ 替代:$1_$4_Thankyou_$2_0.pdf