[问题] 取代档名成为固定位数

楼主: waterfat520 ( )   2014-06-26 18:12:24
/* 批次改档名软件 Ken Rename 支援正规表示法取代
*
*/
有一堆档名如下
XXXX_1_of_15.txt
XXXX_10_of_15.txt
XXXX_11_of_15.txt
XXXX_12_of_15.txt
.....
XXXX_2_of_15.txt
XXXX_3_of_15.txt
XXXX_4_of_15.txt
........
XXXX_9_of_15.txt
因为照档名排序就乱掉 想改成所有数字都照二位数即可自动排序
例如 01 02 03 ..... 10 11 12 .....15
所以脑筋动到正规表示法来 目前做法很烂 其实用二次处理
先前处理把不相关字符去掉 变成
1.txt
10.txt
11.txt
12.txt
.....
2.txt
3.txt
4.txt
....
9.txt
然后不管副档名 只取代档名一位数 ^(\d)$ 变成 0$1 就变成
01.txt
02.txt
....
12.txt
上面偷用了开头结尾技巧 请问有没有办法一步就只取代一位数数字档名 前面加上0开头
因为数字位数 有优先比较的顺序 虽然可以用 (1[0-9])|([1-9]) 找到中间数字字符
用$1存二位数数字 $2存一位数数字
但取代的正规表示不会写 用0$2会连二位数数字都改成0.txt
作者: l10nel (小失)   2014-06-26 18:25:00
你对 (1[0-9])|([1-9]) 会存入$2的观念错误,这式子顶多只会存入$1,不然失败,不是吗?$2永远是空的,因为中间有 |解决你的问题,为何去掉不相关字符?可用它当anchor,查找/_(\d)_/ 换成/_0$1_/ 一步不就好了?
楼主: waterfat520 ( )   2014-06-26 18:37:00
一语惊醒梦中人 去除太多不必要字串 反而少了anchor你是对的 由来是([1-9])|(1[0-9])会先比二位数字符"1"所以才想把顺序倒过来 反而只抓到双位数 已解决感谢

Links booklink

Contact Us: admin [ a t ] ucptt.com