马黑黑 发表于 2023-1-23 09:19

使用正则统计字数和标点的思路

一、英文单词

(一)单词个数

单词的构成略微复杂,这个帖子大致探讨了几种结构,也基本实现了统计单词个数的需求:

JS:用正则表达式统计英文单词和GBK汉字个数 - 马黑黑教程专版 - 花潮论坛 - Powered by Discuz! (huachaowang.com)

(二)小角标点

我们可以一次性取出全部的英文字符,含字母和非字母字符(小角),式子很简单,/[ -~]/g ,然后这些字符减去 /\w/g 匹配到的英文和数字,大约就可得到标点符号了,比较精准的话还要减去参与单词构成的符号个数。

当然也可以使用罗列方式匹配标点,式子会比较长,也容易有遗漏。

二、汉字

上面提到的帖子里,对中文字数的统计也做了探讨,统计20902 个GBK汉字是非常精准的。用匹配GBK汉字的方式统计汉字字数,对于绝大多数中文写作的文本而言是适用的。

中文标点符号的统计麻烦,在Unicode编码表里它们没有连续存放。若统计常见的,也许用罗列法比较牢靠。以下这些应该包含常用中文标点符号了吧:

!?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰?〿–—‘'‛“”„‟…‧﹏.

但肯定没有囊括全部。

另一个蹩脚的处理思路:

我们可以用 /[^ -~]/ 或 [^\x00-\xff] 匹配出所有的双字节字符,再减去 /[一-龥]/ 匹配到的总数,得到的就是标点符号了。说这个主意蹩脚,是因为双字节取出GBK汉字之后并不是都是双字节标点符号,可能会有很多的非GBK汉字的文字字符。不过,对于普通中文环境的文本,统计结果倒是八九不离十了。

单纯使用正则统计字数,代码开销小,运行消耗低,但要到面面俱到,正则有些犯愁。

庶民来了 发表于 2023-1-23 09:46

这个帖子很正能量,统计是要严谨。

樵歌 发表于 2023-1-23 09:46

无所不能!年二快乐!

马黑黑 发表于 2023-1-23 10:33

樵歌 发表于 2023-1-23 09:46
无所不能!年二快乐!

节日快乐

小辣椒 发表于 2023-1-23 11:41

谢谢黑黑分享新教程,辛苦的~{:4_199:}

小辣椒 发表于 2023-1-23 11:41

过年都不休息,黑黑过年喝酒的时间都花在论坛了{:4_170:}

马黑黑 发表于 2023-1-23 12:07

小辣椒 发表于 2023-1-23 11:41
过年都不休息,黑黑过年喝酒的时间都花在论坛了

边喝边玩玩

红影 发表于 2023-1-23 13:12

统计字数是非常重要的,标点也需要统计?{:4_173:}

红影 发表于 2023-1-23 13:14

那个统计字数的帖子我已经自己存起来了,很多时候都会遇到需要统计字数的时候。只是这个统计标点符号的,不知道能派什么用途{:4_173:}

马黑黑 发表于 2023-1-23 17:14

红影 发表于 2023-1-23 13:14
那个统计字数的帖子我已经自己存起来了,很多时候都会遇到需要统计字数的时候。只是这个统计标点符号的,不 ...
标点符号如果不需要统计,那么,收藏的这个,已经够用了

红影 发表于 2023-1-23 19:15

马黑黑 发表于 2023-1-23 17:14
标点符号如果不需要统计,那么,收藏的这个,已经够用了

对的,我需要统计的只是字数,标点不管的{:4_173:}

马黑黑 发表于 2023-1-23 19:39

红影 发表于 2023-1-23 19:15
对的,我需要统计的只是字数,标点不管的

汉字的话,我这个是很精准的。

樵歌 发表于 2023-1-23 19:42

马黑黑 发表于 2023-1-23 10:33
节日快乐

晚上{:4_176:}好呼呼

马黑黑 发表于 2023-1-23 19:46

樵歌 发表于 2023-1-23 19:42
晚上好呼呼

喝过了就成

红影 发表于 2023-1-23 19:51

马黑黑 发表于 2023-1-23 19:39
汉字的话,我这个是很精准的。

对呀,特别准确。需要查字数的时候真的太方便了,看到这个毫不犹豫就存起来了{:4_173:}

马黑黑 发表于 2023-1-23 20:02

红影 发表于 2023-1-23 19:51
对呀,特别准确。需要查字数的时候真的太方便了,看到这个毫不犹豫就存起来了

嗯,没问题的,我对GBK汉字有研究

红影 发表于 2023-1-23 20:05

马黑黑 发表于 2023-1-23 20:02
嗯,没问题的,我对GBK汉字有研究

以前玩风云,这会用wird去查字数,现在黑黑提供了更好的方法呢。

马黑黑 发表于 2023-1-23 20:07

红影 发表于 2023-1-23 20:05
以前玩风云,这会用wird去查字数,现在黑黑提供了更好的方法呢。

我还不知道你们玩这些还有这个需求

红影 发表于 2023-1-23 20:09

马黑黑 发表于 2023-1-23 20:07
我还不知道你们玩这些还有这个需求

是啊,少一个字都不行。你提供的方法太方便了,一点都不会错{:4_189:}

马黑黑 发表于 2023-1-23 20:10

红影 发表于 2023-1-23 20:09
是啊,少一个字都不行。你提供的方法太方便了,一点都不会错

那敢情好
页: [1] 2 3
查看完整版本: 使用正则统计字数和标点的思路