2010-07-22 37 views
1

幫助我需要擺脫尾隨重複non_alphanumeric符號像需要在PostgreSQL REGEXP_REPLACE

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

如果這些不同的符號,然後它們將被忽略。

我很新的正則表達式, 所以我想出了

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

嘗試一下。

但是,我認識到'謝謝'後導致一些問題的尾部空間。我會回來"thanks "而不是"thanks ."這有點奇怪,因爲我使用了一個在線正則表達式工具,並且第一個空白不匹配。誰能幫忙?

注:我沒有插入雙反斜槓。

+0

你想擺脫所有非字母數字符號的除了最後一個(標點符號)或實際幹掉每一個的他們?或者,也許擺脫重複的標點符號?我不確定我明白你想要哪一個。 – NorthGuard 2010-07-22 17:05:53

+0

實際上我想減少2個或更多個重複的相似符號(有或沒有空白)爲1,例如「......」。只是「。」諸如「#%@」之類的內容將保持不變。 – goh 2010-07-22 17:08:18

+0

空間應該如何處理(因爲它不是字母數字)?如果你有字符串''謝謝!!!! ???''你想要''謝謝!?「或''謝謝!?''?編輯:在不好的地方換行符,基本上如果原始字符串在重複的不同符號之間有空格。 – NorthGuard 2010-07-22 17:37:06

回答

2

更換

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

\1 

我不知道PostgreSQL的,但是從你的榜樣,我猜:

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

這也將取代多個領先有一個空間的空間。如果您不希望那樣(即,如果您希望領先空間完全被留下),則使用

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

代替。

+0

這就是我也會這樣做的(除了我會在末尾加上另一個'\ s *'來處理尾部空格)。但是OP的正則表達式應該可以工作 - 在「Tcl ARE/PostgreSQL」模式下,它在RegexBuddy中運行良好。 – 2010-07-22 20:29:18

+0

@ Alan,@ Tim,非常感謝! – goh 2010-07-23 02:56:11

0

嘗試這樣的:

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

結果:

Thanks !