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