正則表達式匹配所有中文字符或者帶有雙引號的字符

需求是統計工程裏所有中文字符(中文註釋除外),並且整理到word文檔中。例如,工程裏一個帶有中文字符的文件如下:

統計結果:

如果中文字符串數量很少,我們完全可以手動一個一個統計,但如果數量很多,幾百幾千個中文字符,在一個一個手動統計怕是要累死人。而用正則表達式就可以輕鬆地完成統計。

首先我們用正則表達式匹配文件裏(java)所有帶有雙引號的中文字符。剛開始我用的表達式是:"[\u4e00-\u9fa5]+"

結果發現只能匹配引號中是純中文的字符串,像"您輸入的暱稱長度不正確,請重新輸入""暱稱中不可有空格,請重新輸入!""暱稱中包含敏感字符,請重新輸入【",這些都無法匹配到。正確的表達式應該是:"(?:[^"\\]|\\.)*"

這樣就能匹配所有帶有雙引號的字符了。

不難看出,如果匹配所有純中文字符(不帶引號),那應該用的正則表達式是:[\u4e00-\u9fa5]

這樣是一個漢字一個漢字地匹配的。當然,這裏前後的雙引號也可以換成其他符號,比如換成單引號就是匹配帶有單引號(被單引號包括)的字符,換成小括號就是匹配帶有小括號(被小括號包括)的字符……

總結一下就是

匹配所有雙引號內的純中文字符:"[\u4e00-\u9fa5]+"

匹配所有雙引號內的字符:"(?:[^"\\]|\\.)*"

匹配成功後,我們可以通過整體替換,提取出來所有匹配的字符。比如我們這個,我們先把要統計的文檔粘貼到notepad++裏(其他編輯工具也可以),由於我們要獲取引號內的字符,那我們只需要把引號外的內容刪除掉,剩下的就是我們想要的。但是問題是我們怎麼才能刪掉引號外的內容呢?其實上面我們已經找到了方法,還是用正則表達式,我們在文本的開頭加上一個引號,如下圖所示:

然後,我們從文檔最開始搜索替換,輸入我們前面的匹配帶有雙引號的字符的正則表達式:

切記光標一定要放在文檔最前頭,也就是我們加的那個引號之前,否則匹配會混亂。如果不確定可以先點擊“查找下一個”看看匹配是否正確,確定無誤後,點擊全部替換,結果如下:

最後我們只需要把文本最前面的一個引號和逗號去掉,再在文本最後加上一個引號,就得到要求的統計結果了。

如果有更好的方法,希望不吝賜教!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章