我有一個字幕檔,它的格式錯了,在逗號與數字之間多了一個空白:
00:00:00, 256 --> 00:00:01, 280
正確格式中間是沒有空白的:
00:00:00,256 --> 00:00:01,280
所以我在 Notepad++ 中嘗試使用正規表示式來搜尋、取代,但我祇會搜尋:
\d{2}, \d{3}
卻不知道要怎麼刪除中間的那一個空白。在 FB 上經過多位好友教導後,終於知道怎麼解決這個問題了。
將字串拆解為數個部份
怎麼做呢?首先,將要搜尋的字串拆成三段,前後是我們要保留的部份,中間那一段是我們要刪除的:
原本的字串:00:00:00, 256
第一段,逗號與前面的幾個字元『:00,』
第二段,就是那個空白字元
第三段,空白之後的數字『256』
為什麼第一段我要切『:00,』呢?就是怕祇有『00』的話可能文章中有其他數字會發生誤判,加上前面的那個冒號變成『:00,』誤判的機會就小很多。
切三段之後,每一段前後都用 ( ) 包起來,正規表示式解譯器才知道每一段文字要從哪裡開始,到哪裡結束。
原本的字串:00:00:00, 256
第一段,『(:00,)』
第二段,『( )』
第三段,『(256)』
這樣一來,解譯器就會在找到符合的字串後,把第一段的資料存在一個變數 $1,第二段存在 $2,第三段存 $3。因為我們不要第二段,所以搜尋到這個字串之後,把它取代為 $1$3 即可。
搜尋同類型的字串
不過等等,執行之後,祇有『:00, 256』取代為『:00,256』,後面的時間軸還是都沒變啊。
00:00:00,256 --> 00:00:01, 280
這是因為我們要求程式搜尋的是『(:00,)( )(256)』這樣的精確字串,程式也很盡責的幫我們找到符合的字串,我們要改讓程式幫我們搜尋『(:數字數字,)( )(數字數字數字)』這樣的組合。
在正規表示式裡『\d』(或『\d{1}』) 代表 0-9 的數字,『\d\d』(或『\d{2}』)可以代表 00-99 的數字,相同的,『\d\d\d』(或『\d{3}』)可表示三位數的 000-999;而『\s』可以表示空格。所以我們要搜尋的字串可以表示為:
原本的字串:00:00:00, 256
第一段,『(:\d\d,)』
第二段,『(\s)』
第三段,『(\d\d\d)』
之後祇要讓程式去搜尋符合這個類型的字串,並取代為 $1$3 的新組合,就完成工作嘍。