使用正则统计字数和标点的思路
一、英文单词(一)单词个数
单词的构成略微复杂,这个帖子大致探讨了几种结构,也基本实现了统计单词个数的需求:
JS:用正则表达式统计英文单词和GBK汉字个数 - 马黑黑教程专版 - 花潮论坛 - Powered by Discuz! (huachaowang.com)
(二)小角标点
我们可以一次性取出全部的英文字符,含字母和非字母字符(小角),式子很简单,/[ -~]/g ,然后这些字符减去 /\w/g 匹配到的英文和数字,大约就可得到标点符号了,比较精准的话还要减去参与单词构成的符号个数。
当然也可以使用罗列方式匹配标点,式子会比较长,也容易有遗漏。
二、汉字
上面提到的帖子里,对中文字数的统计也做了探讨,统计20902 个GBK汉字是非常精准的。用匹配GBK汉字的方式统计汉字字数,对于绝大多数中文写作的文本而言是适用的。
中文标点符号的统计麻烦,在Unicode编码表里它们没有连续存放。若统计常见的,也许用罗列法比较牢靠。以下这些应该包含常用中文标点符号了吧:
!?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰?〿–—‘'‛“”„‟…‧﹏.
但肯定没有囊括全部。
另一个蹩脚的处理思路:
我们可以用 /[^ -~]/ 或 [^\x00-\xff] 匹配出所有的双字节字符,再减去 /[一-龥]/ 匹配到的总数,得到的就是标点符号了。说这个主意蹩脚,是因为双字节取出GBK汉字之后并不是都是双字节标点符号,可能会有很多的非GBK汉字的文字字符。不过,对于普通中文环境的文本,统计结果倒是八九不离十了。
单纯使用正则统计字数,代码开销小,运行消耗低,但要到面面俱到,正则有些犯愁。
这个帖子很正能量,统计是要严谨。 无所不能!年二快乐! 樵歌 发表于 2023-1-23 09:46
无所不能!年二快乐!
节日快乐 谢谢黑黑分享新教程,辛苦的~{:4_199:} 过年都不休息,黑黑过年喝酒的时间都花在论坛了{:4_170:} 小辣椒 发表于 2023-1-23 11:41
过年都不休息,黑黑过年喝酒的时间都花在论坛了
边喝边玩玩 统计字数是非常重要的,标点也需要统计?{:4_173:} 那个统计字数的帖子我已经自己存起来了,很多时候都会遇到需要统计字数的时候。只是这个统计标点符号的,不知道能派什么用途{:4_173:} 红影 发表于 2023-1-23 13:14
那个统计字数的帖子我已经自己存起来了,很多时候都会遇到需要统计字数的时候。只是这个统计标点符号的,不 ...
标点符号如果不需要统计,那么,收藏的这个,已经够用了 马黑黑 发表于 2023-1-23 17:14
标点符号如果不需要统计,那么,收藏的这个,已经够用了
对的,我需要统计的只是字数,标点不管的{:4_173:} 红影 发表于 2023-1-23 19:15
对的,我需要统计的只是字数,标点不管的
汉字的话,我这个是很精准的。 马黑黑 发表于 2023-1-23 10:33
节日快乐
晚上{:4_176:}好呼呼 樵歌 发表于 2023-1-23 19:42
晚上好呼呼
喝过了就成 马黑黑 发表于 2023-1-23 19:39
汉字的话,我这个是很精准的。
对呀,特别准确。需要查字数的时候真的太方便了,看到这个毫不犹豫就存起来了{:4_173:} 红影 发表于 2023-1-23 19:51
对呀,特别准确。需要查字数的时候真的太方便了,看到这个毫不犹豫就存起来了
嗯,没问题的,我对GBK汉字有研究 马黑黑 发表于 2023-1-23 20:02
嗯,没问题的,我对GBK汉字有研究
以前玩风云,这会用wird去查字数,现在黑黑提供了更好的方法呢。 红影 发表于 2023-1-23 20:05
以前玩风云,这会用wird去查字数,现在黑黑提供了更好的方法呢。
我还不知道你们玩这些还有这个需求 马黑黑 发表于 2023-1-23 20:07
我还不知道你们玩这些还有这个需求
是啊,少一个字都不行。你提供的方法太方便了,一点都不会错{:4_189:} 红影 发表于 2023-1-23 20:09
是啊,少一个字都不行。你提供的方法太方便了,一点都不会错
那敢情好