You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL实现句子单词数统计:排除单个特殊字符与标点的查询方法

MySQL统计句子单词数(排除单个特殊字符/标点)

针对你的需求,我们可以利用MySQL的正则替换功能(MySQL 8.0+支持)处理特殊字符与标点,准确统计有效单词数量。以下是优化后的查询语句:

SELECT 
    sentence,
    CASE 
        WHEN TRIM(processed_sentence) = '' THEN 0
        ELSE (LENGTH(processed_sentence) - LENGTH(REPLACE(processed_sentence, ' ', ''))) + 1
    END AS wordsinname
FROM (
    SELECT 
        sentence,
        -- 第一步:将非字母、非单引号的字符替换为空格
        -- 第二步:合并连续空格并去除首尾空格
        TRIM(REGEXP_REPLACE(REGEXP_REPLACE(sentence, '[^a-zA-Z'']', ' '), '\\s+', ' ')) AS processed_sentence
    FROM `database`
) AS processed;

代码逻辑说明

  1. 第一层正则替换:REGEXP_REPLACE(sentence, '[^a-zA-Z'']', ' ')
    把所有不属于字母(a-z、A-Z)和单引号的字符替换为空格。这会将单词末尾的标点(如world,里的,)、单独的特殊字符(如#、&)转为空格,同时保留单词内部的单引号(如didn't、it's)。

  2. 第二层正则替换:REGEXP_REPLACE(..., '\\s+', ' ')
    将连续的多个空格合并为单个空格,避免因多个特殊字符产生的多余空格干扰单词计数。

  3. TRIM处理:去除字符串首尾的空格,防止首尾空格影响最终的空格数量统计。

  4. 单词数计算:通过计算处理后字符串的总长度与去除空格后的长度差,得到空格数量,加1即为单词总数;如果处理后字符串为空(原句子全是特殊字符),则返回0。

验证你的示例

  • 输入'Hello world, how are you?' → 处理后为'Hello world how are you' → 单词数5
  • 输入'Me & my friend are here' → 处理后为'Me my friend are here' → 单词数5
  • 输入'I think it's great' → 处理后为'I think it's great' → 单词数4
  • 输入'Who # is # that?' → 处理后为'Who is that' → 单词数3
  • 输入'Oh , didn't see you there!' → 处理后为'Oh didn't see you there' → 单词数5

额外注意事项

  • 如果需要支持多语言字母(如带重音的字符),可将正则中的a-zA-Z替换为[[:alpha:]],即正则改为[^[:alpha:]']。
  • 若需要保留其他单词内部的特殊字符(如连字符mother-in-law),可将对应的字符加入正则允许的范围,例如[^a-zA-Z'-]。
  • 若使用MySQL 8.0以下版本(不支持REGEXP_REPLACE),可以通过嵌套多个REPLACE枚举替换常见特殊字符,再合并空格(这种方式灵活性较差,需手动覆盖所有需要处理的字符)。

内容的提问来源于stack exchange,提问作者Ben Kitai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:31:36