從網上下載的一些小說txt檔案,不少會按照每行一定字數給換行,這樣做大概是方便一些PC上的文本閱讀器,但是我通常是在手機上看小說的,手機上的閱讀器會根據螢幕尺寸對內容進行重拍版,這樣一來,就總是出現“一行滿,一行殘”的效果,不但視覺效果極差,而且總是在語意連貫的地方突然換行(有的閱讀器認為換行就是分段,會自動在行前縮排),這樣讀起來頗費勁。
本來想寫個指令碼來去除這些多餘的換行,不過由於惰性,或者想殺雞焉用牛刀,想到了用編輯器。Windows環境下面最喜歡的編輯器是EditPlus,就用它了。
要去除多餘的換行,最簡單的做法就是把所有的\r\n給替換成Null 字元(不是空白或者空格),但是這樣的一個副作用是本來應該換行的地方也給去掉分行符號了,整個txt檔案都成一行了,肯定也不行。我這裡想到的辦法是對分行符號(\r\n)前的字元進行篩選,就是過濾掉“。”、“!”、“””、“?”這些通常出現在句尾的標點符號出現在分行符號前的情形。這樣做當然也不準確,一個明顯的問題就是如果每段前有標題,那麼這個標題就被計入下一段的開頭了,不過對於小說這個問題不是很大,一般閱讀過程中可以識別出來,而且解決起來也不甚方便,付出和收益不是很合算,就不去管這個問題了。
按Ctrl+H調出EditPlus的替換對話方塊,裡面有個“Regex”的複選框,這個肯定勾上。先嘗試發現分行符號,在“尋找”旁邊的文字框輸入“\r\n”,結果沒有找到任何結果,尋找旁邊的下拉式箭頭點一下出現一個下拉式功能表,有個“分行符號”的選項,點一下後在尋找文字框自動添加了“\n”,於是嘗試用\n去尋找分行符號,結果找到了。這裡檔案的分行符號應該是\r\n,因為EditPlus狀態列顯示有個地區顯示的是PC,而不是Unix或Mac,表示了分行符號類型是\r\n。而為什麼通過\n才能找到呢?我猜是EditPlus為了實現對對多平台檔案編輯而對分行符號在Regex裡進行了抽象統一。而後進行過濾,把\n改成[^。”!?]\n,這樣可以尋找到所有“想要”去除的分行符號,但是這樣尋找的結果是把分行符號前的一個字元也給包含了。於是想到了Regex裡面的group,不知道EditPlus支不支援regexp的group,嘗試了一番,最後還是通過點擊尋找和替換輸入框右邊的下拉式功能表的一些啟發找到了group替換(Editplus裡面叫做標記運算式)的辦法,即把([^。”!?])\n替換為\1,如:
點擊全部替換就完成了。EditPlus不負眾望,馬到成功。