正则表达式匹配所有中文字符或者带有双引号的字符

需求是统计工程里所有中文字符(中文注释除外),并且整理到word文档中。例如,工程里一个带有中文字符的文件如下:

统计结果:

如果中文字符串数量很少,我们完全可以手动一个一个统计,但如果数量很多,几百几千个中文字符,在一个一个手动统计怕是要累死人。而用正则表达式就可以轻松地完成统计。

首先我们用正则表达式匹配文件里(java)所有带有双引号的中文字符。刚开始我用的表达式是:"[\u4e00-\u9fa5]+"

结果发现只能匹配引号中是纯中文的字符串,像"您输入的暱称长度不正确,请重新输入""暱称中不可有空格,请重新输入!""暱称中包含敏感字符,请重新输入【",这些都无法匹配到。正确的表达式应该是:"(?:[^"\\]|\\.)*"

这样就能匹配所有带有双引号的字符了。

不难看出,如果匹配所有纯中文字符(不带引号),那应该用的正则表达式是:[\u4e00-\u9fa5]

这样是一个汉字一个汉字地匹配的。当然,这里前后的双引号也可以换成其他符号,比如换成单引号就是匹配带有单引号(被单引号包括)的字符,换成小括号就是匹配带有小括号(被小括号包括)的字符……

总结一下就是

匹配所有双引号内的纯中文字符:"[\u4e00-\u9fa5]+"

匹配所有双引号内的字符:"(?:[^"\\]|\\.)*"

匹配成功后,我们可以通过整体替换,提取出来所有匹配的字符。比如我们这个,我们先把要统计的文档粘贴到notepad++里(其他编辑工具也可以),由于我们要获取引号内的字符,那我们只需要把引号外的内容删除掉,剩下的就是我们想要的。但是问题是我们怎么才能删掉引号外的内容呢?其实上面我们已经找到了方法,还是用正则表达式,我们在文本的开头加上一个引号,如下图所示:

然后,我们从文档最开始搜索替换,输入我们前面的匹配带有双引号的字符的正则表达式:

切记光标一定要放在文档最前头,也就是我们加的那个引号之前,否则匹配会混乱。如果不确定可以先点击“查找下一个”看看匹配是否正确,确定无误后,点击全部替换,结果如下:

最后我们只需要把文本最前面的一个引号和逗号去掉,再在文本最后加上一个引号,就得到要求的统计结果了。

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

 

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