Blogtrottr
批踢踢實業坊 ask 板
 
Re: [請問] 如何將srt字幕去掉時間軸後保存為文本
Jan 16th 2014, 04:50, by s25g5d4

作者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.

You are receiving this email because you subscribed to this feed at blogtrottr.com.

If you no longer wish to receive these emails, you can unsubscribe from this feed, or manage all your subscriptions
arrow
arrow
    全站熱搜

    xals2q 發表在 痞客邦 留言(0) 人氣()