[問題] 取代檔名成為固定位數

作者: 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