暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

digoal 2021-01-07
1680

作者

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

PostgreSQL 许愿链接

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

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论