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

PostgreSQL如何检测文本字段中的特殊字符、多余空白等内容?

PostgreSQL正则修正方案:精准检测指定特殊字符并统计次数

问题根源

你之前的SQL返回无关记录,是因为正则表达式范围太宽泛(比如误用\W匹配非单词字符,会包含点号、逗号等正常符号),或者错误匹配了单个空格这类合法内容。以下是精准匹配目标内容的修正方案:

精准正则表达式

针对你需要检测的内容,构建严格匹配的正则,只包含指定特殊符号和异常空白:

([''`"<>’+{}&|\\/]|\t{2,}|\r|\n| {2,})

各部分说明:

  • [''"<>’+{}&|\/]:匹配单引号、双引号、反引号、<、>、撇号、+、{}、&、|、正反斜杠(注意PostgreSQL中单引号用''转义,反斜杠用\`转义)
  • \t{2,}:匹配2个及以上连续制表符(多余制表符)
  • \r|\n:匹配回车、换行符
  • {2,}:匹配2个及以上连续空格(对应单词间的多个空格)

实用SQL示例

1. 筛选包含目标内容的记录

SELECT your_text_column
FROM your_table
WHERE your_text_column ~ '([''`"<>’+{}&|\\/]|\t{2,}|\r|\n| {2,})';

2. 统计每条记录的目标内容总出现次数

SELECT 
    your_text_column,
    regexp_count(your_text_column, '([''`"<>’+{}&|\\/]|\t{2,}|\r|\n| {2,})', 'g') AS total_occurrences
FROM your_table
WHERE your_text_column ~ '([''`"<>’+{}&|\\/]|\t{2,}|\r|\n| {2,})';
  • 'g'参数表示全局匹配,统计所有出现次数而非仅第一次

3. 分类型统计各内容出现次数

如果需要单独统计每种内容的次数,可以拆分正则:

SELECT 
    your_text_column,
    regexp_count(your_text_column, '[''`"<>’+{}&|\\/]', 'g') AS special_chars_count,
    regexp_count(your_text_column, '\t{2,}', 'g') AS extra_tabs_count,
    regexp_count(your_text_column, '[\r\n]', 'g') AS line_breaks_count,
    regexp_count(your_text_column, ' {2,}', 'g') AS extra_spaces_count,
    -- 总次数
    (regexp_count(your_text_column, '[''`"<>’+{}&|\\/]', 'g') +
     regexp_count(your_text_column, '\t{2,}', 'g') +
     regexp_count(your_text_column, '[\r\n]', 'g') +
     regexp_count(your_text_column, ' {2,}', 'g')) AS total_count
FROM your_table
WHERE your_text_column ~ '([''`"<>’+{}&|\\/]|\t{2,}|\r|\n| {2,})';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:07:39