作者s25g5d4 (function{}())
看板ask
標題Re: [請問] 如何將srt字幕去掉時間軸後保存為文本
時間Thu Jan 16 04:50:40 2014
可以使用支援 Regular Expression (正規表示式) 的文字編輯器作取代 如果不知道要用哪個,可以考慮用台灣人開發的 Notepad++
http://notepad-plus-plus.org/zh/download/ 有中文介面 正規表示式非常複雜,但是有些基本的語法使用起來很簡單卻強大 以原問題來說,.srt 的規則是 1 00:01:02,003 --> 00:10:20,300 字幕在這裡 2 00:11:12,345 --> 00:15:30,567 第二行字幕 可以把正規表示式寫成 [\r\n]*\d+[\r\n]+[0-9:, ]+-->[0-9:, ]+ 簡單分析一下這行
[\r\n]*\d+[\r\n]+[0-9:, ]+-->[0-9:, ]+ [\r\n]*:代表任意數量的換行,包括沒有 例如大部分 .srt 的第一行就是 1 而不是換行字元 而第二行字幕的 2 前面又有三個換行字元 1 00:10:20,300 字幕在這裡 00:15:30,567 第二行字幕 如圖上所示,所以開頭的換行字元應該要抓 0~3 個比較好 [] 的意思是中括號內的任一字元都符合規則,並且只抓一個字元, 也就是說 [abc] 會抓到 a 或 b 或 c 卻不能抓到 ab, 因為 ab 是兩個字元。 而很明顯我們這邊要抓的不只一個字元,所以為了打破這個限制, 我們在中括號後面加上一個 * 字號,代表 * 字號前方的規則 可以重複 0 至無限多次。也就是說 [abc]* 可以抓到空白的字串, 也可以抓到 a, ab, ba, bac, abbca。如果要限制重複次數可以用{} 也就是變成 [\r\n]{0,3},這樣會限制 [\r\n] 只能出現 0 至 3 次。 而因為換行很難簡單的打出來,所以這邊要打成 \r 或是 \n 來代表換行。 為什麼會有兩個,是因為 \r 的意思是 carriage return, 而 \n 是 new line 的意思。在 windows 下,一個換行同時包含了 \r\n 而 Unix-like (如 Linux) 通常只會有 \n,所以為了保持最佳相容性, 這邊同時用了 \r 與 \n 來抓換行。而因為 windows 同時使用了 \r\n 所以在 windows 下一個換行其實共佔兩個字元,因此連續三個換行 就可能會包含六個字元。 所以 [\r\n]* 的意思是
只要遇到是 \r 或 \n 的字元就抓取 0 至無限多個。 \d+: 等同於 [0123456789], 也就是抓取所有數字, 跟 [] 一樣的是一個 \d 只能抓取一個數字,因此我們要在後面 加上 + 來代表重複 1 至無限次。也就是說 + 與 * 是相似的東西, 差別在於 * 代表可抓可不抓,而 + 代表至少抓到一個。 另外 [0123456789] 可以簡寫成 [0-9], 同理若要抓取所有大寫英文字 可以寫成 [A-Z],若小寫跟大寫要同時抓則寫成 [A-Za-z] 所以 \d+ 的意思是
抓取 0-9 的數字至少一個。 [\r\n]+: 與上方的規則相似,差別在於結尾是 + 而不是 * 。 所以 [\r\n]+ 的意思是
只要遇到是 \r 或 \n 的字元就抓取 1 至無限多個。 [0-9:, ]+: 基本規則上面都談過了,而這裡就是上面談過東西的進化版 一樣 [] 只抓一個字元,所以必須要重複 1 至無限多次才行, 而抓的東西必須是 0123456789 或 : 或 , 或一個空格。 因此 [0-9:, ]+ 的意思是
只要遇到是 0-9 或 : 或 , 或空白就抓取 1 至無限多個。 -->: 這大概是裡面最平凡無奇的一個了... 是的你沒看錯,這就只是個 --> 而已,抓到的東西也就是 --> 而且順序必須一樣 以上就是簡單的正規表示式解法 對於 end 的你我就再提供一次解法,請愛用支援正規表示式的 Notepad++ 然後在尋找募兵中輸入 [\r\n]*\d+[\r\n]+[0-9:, ]+-->[0-9:, ]+ 而取代成可以自行發威。 以上就是些簡單的正規表示式教學 --
→ Entropy1988:就不要下次插了插頭結果忘了按開關 07/30 11:27
推 ArSaBuLu: 就不要下次開了開關結果忘了放東西 07/30 11:30
→ peter261989:就不要下次記得放東西結果忘了拿出來 07/30 11:34
→ fine246: 就不要下次拿出東西結果擺在那忘了吃 07/30 11:47
推 Entropy1988:就不要下次記得吃飯結果忘了煮下一餐 07/30 11:50 --
※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.183.96
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.
留言列表