需要帮助postgresql regexp_replace

时间:2010-07-22 17:01:28

标签: regex postgresql

我需要摆脱拖尾重复的非字母数字符号,如

"thanks ! !!!!!!!""thanks !"

如果这些不同的符号会被忽略。

我对正则表达式很新, 所以我想出了

regexp_replace('Thanks . . . .  ', '((\\W)\\s*)(\\2\\s*)+', '\\2')

尝试一下。

然而,我意识到'谢谢'之后的尾随空间会导致一些问题。我会回来"thanks "而不是"thanks ."这有点奇怪,因为我使用了在线正则表达式工具并且第一个空格不匹配。有人可以帮忙吗?

注意:我确实插入了双反斜杠。

2 个答案:

答案 0 :(得分:2)

替换

(\W)(\s*\1)+

\1

我不知道PostgreSQL,但是从你的例子来看,我猜:

regexp_replace('Thanks . . . .  ', '(\\W)(\\s*\\1)+', '\\1')

这也将用一个空格替换前导多个空格。如果您不想要(即如果您希望前导空格完全独立),请使用

([^\s\w])(\s*\1)+   // '([^\\s\\w])(\\s*\\1)+'

代替。

答案 1 :(得分:0)

尝试这样:

select regexp_replace('Thanks ! !!!!!!!!', '(\\s*)((\\W)\\s*)(\\2\\s*)+', '\\1\\2');

结果:

Thanks !