作者waterfat520 ( )
看板RegExp
標題[問題] 取代檔名成為固定位數
時間Thu Jun 26 18:12:24 2014
/*
批次改檔名軟體 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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.208.98
※ 文章網址: http://www.ptt.cc/bbs/RegExp/M.1403777546.A.BC1.html
推 l10nel:你對 (1[0-9])|([1-9]) 會存入$2的觀念錯誤,這式子頂多只 06/26 18:25
→ l10nel:會存入$1,不然失敗,不是嗎?$2永遠是空的,因為中間有 | 06/26 18:26
→ l10nel:解決你的問題,為何去掉不相關字元?可用它當anchor, 06/26 18:27
→ l10nel:查找/_(\d)_/ 換成/_0$1_/ 一步不就好了? 06/26 18:28
→ waterfat520:一語驚醒夢中人 去除太多不必要字串 反而少了anchor 06/26 18:37
→ waterfat520:你是對的 由來是([1-9])|(1[0-9])會先比二位數字符"1" 06/26 18:38
→ waterfat520:所以才想把順序倒過來 反而只抓到雙位數 已解決感謝 06/26 18:40