Skip to content

Files

Latest commit

Dec 15, 2023
f400df2 · Dec 15, 2023

History

History
127 lines (73 loc) · 4.49 KB

20210709_02.md

File metadata and controls

127 lines (73 loc) · 4.49 KB

PostgreSQL 正则表达式 短文本清洗, 去除重复字符

作者

digoal

日期

2021-07-09

标签

PostgreSQL , 正则


背景

视频回放: https://www.bilibili.com/video/BV11q4y1p7m1/

场景:

  • 短文本(评论、客服交互、弹幕等)字符串清洗

挑战:

  • 语言字符处理逻辑复杂, 例如常见的词组重复、字符重复要求去除, 数字可能重复但是又不能去除

PG解决方案

  • 正则表达式, 快速清洗数据

例子

  • 数字: 不去重复
  • 英文字母: 有3个以上连续词组或字符时去重
  • 其他字符: 单个字符或词组重复时去重

例如:

贵很贵很贵很贵难道不是真的真的很贵很贵吗 不贵不贵1000!!!!!aaaaa

得到:

贵很贵难道不是真的很贵吗 不贵1000!a

DEMO

正则表达式:

postgres=# select regexp_replace('贵很贵很贵很贵难道不是真的真的很贵很贵吗     不贵不贵1000!!!!!aaaaa', '(\W+)\1{1,}','\1','g');     
             regexp_replace                  
-----------------------------------------    
 贵很贵难道不是真的很贵吗 不贵1000!aaaaa    
(1 row)    

不知道能不能在1个表达式中完成,

postgres=# select regexp_replace('贵很贵很贵很贵难道不是真的真的很贵很贵吗     不贵不贵1000!!!!!aaaaa', '(\W+)\1{1,}|([A-Za-z_]+)\1{2,}','\1','g');    
             regexp_replace                  
-----------------------------------------    
 贵很贵难道不是真的很贵吗 不贵1000!aaaaa    
(1 row)    

两次搞定

select regexp_replace(regexp_replace('贵很贵很贵很贵难道不是真的真的很贵很贵吗     不贵不贵1000!!!!!aaaaa', '(\W+)\1{1,}','\1','g'), '([A-Za-z_]+)\1{2,}','\1','g');    
    
    
贵很贵难道不是真的很贵吗 不贵1000!a    
postgres=# select regexp_replace(regexp_replace('贵很贵很贵很贵难道不是真的真的很贵很贵吗     不贵不贵1000!!!!!aaaaa wordword nihaonihaonihao', '(\W+)\1{1,}','\1','g'), '([A-Za-z_]+)\1{2,}','\1','g');    
                   regexp_replace                       
----------------------------------------------------    
 贵很贵难道不是真的很贵吗 不贵1000!a wordword nihao    
(1 row)    

参考

https://github.com/qdlaoyao/js-regex-mini-book

https://zhuanlan.zhihu.com/p/29707385

http://c.biancheng.net/cpp/html/1438.html

https://cloud.tencent.com/developer/ask/114503

https://oomake.com/question/615920

https://cloud.tencent.com/developer/ask/56708/answer/94291

https://bbs.csdn.net/topics/40382529

https://blog.csdn.net/yohoph/article/details/7975520

https://www.imooc.com/wenda/detail/576729

https://www.postgresql.org/docs/14/functions-matching.html

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

digoal's wechat