作者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://webptt.com/cn.aspx?n=bbs/RegExp/M.1403777546.A.BC1.html
1F:推 l10nel:你对 (1[0-9])|([1-9]) 会存入$2的观念错误,这式子顶多只 06/26 18:25
2F:→ l10nel:会存入$1,不然失败,不是吗?$2永远是空的,因为中间有 | 06/26 18:26
3F:→ l10nel:解决你的问题,为何去掉不相关字元?可用它当anchor, 06/26 18:27
4F:→ l10nel:查找/_(\d)_/ 换成/_0$1_/ 一步不就好了? 06/26 18:28
5F:→ waterfat520:一语惊醒梦中人 去除太多不必要字串 反而少了anchor 06/26 18:37
6F:→ waterfat520:你是对的 由来是([1-9])|(1[0-9])会先比二位数字符"1" 06/26 18:38
7F:→ waterfat520:所以才想把顺序倒过来 反而只抓到双位数 已解决感谢 06/26 18:40