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

看板RegExp (正規表示式 Regular Expression)作者 ( )時間9年前 (2014/06/26 18:12), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/1
/* 批次改檔名軟體 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

06/26 18:25, , 1F
你對 (1[0-9])|([1-9]) 會存入$2的觀念錯誤,這式子頂多只
06/26 18:25, 1F

06/26 18:26, , 2F
會存入$1,不然失敗,不是嗎?$2永遠是空的,因為中間有 |
06/26 18:26, 2F

06/26 18:27, , 3F
解決你的問題,為何去掉不相關字元?可用它當anchor,
06/26 18:27, 3F

06/26 18:28, , 4F
查找/_(\d)_/ 換成/_0$1_/ 一步不就好了?
06/26 18:28, 4F

06/26 18:37, , 5F
一語驚醒夢中人 去除太多不必要字串 反而少了anchor
06/26 18:37, 5F

06/26 18:38, , 6F
你是對的 由來是([1-9])|(1[0-9])會先比二位數字符"1"
06/26 18:38, 6F

06/26 18:40, , 7F
所以才想把順序倒過來 反而只抓到雙位數 已解決感謝
06/26 18:40, 7F
文章代碼(AID): #1Jg_8Al1 (RegExp)
文章代碼(AID): #1Jg_8Al1 (RegExp)