2010-12-13 74 views
18

在字符串的表列中,我們可以有數字/特殊字符/空格。 我想用空字符替換數字/特殊字符/空格,我看到有函數名爲regexp_replace,但如何使用沒有太多的用戶友好的幫助可用例如我想要使用下面的字符串。postgres regexp_replace只允許a-z和A-Z

String = 'abc$wanto&toremove#special~chars' 

我想刪除從上面的字符串的所有特殊字符和數字想只允許a-z和字符的A-Z其餘部分應該與''更換該怎麼做?

回答

43
select regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]', '', 'g') 
0

應該是:

regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]+', '') 
+0

它由yoursef不會工作嘗試 選擇REGEXP_REPLACE(「ABC123」,「A-ZA- Z','') – 2010-12-13 12:58:37

+0

對不起,我錯過了方括號,不幸的是,我不能測試它目前 – Pit 2010-12-13 13:05:24

7

,使其更簡單:

regexp_replace('abc$wanto&toremove#special~chars', '[^[:alpha:]]') 
+1

這個作品,雖然由於某種原因似乎沒有[文檔](http://www.postgresql.org/ docs/9.3/static/functions-matching.html#POSIX-CLASS-SHORTHAND-ESCAPES-TABLE) – 2014-03-11 18:51:31

+4

'select regexp_replace('abc $ wanto&toremove#special〜chars','[^ [:alpha:]]','' ,'g')' – 2016-12-28 17:07:37

3

對我下面的工作。

regexp_replace(code, '[^a-zA-Z0-9]+', '','g')  

由於它添加了全局過濾器,所以它重複整個字符串的正則表達式。

例,

SELECT regexp_replace('Well- This Did-Not work&*($%%)_', '[^a-zA-Z0-9]+', '')  

返回: 「WellThis沒有,不行的& *($ %%)_」

SELECT regexp_replace('Well- This Did-Not work&*($%%)_', '[^a-zA-Z0-9]+', '','g')  

返回: 「WellThisDidNotwork」

其中有人物我們不想刪除。

+0

以上表達式中g的用法是什麼你可以告訴我 – 2017-10-17 03:56:19

+0

這是一個全局修飾符。 「 」g代表全局搜索,意思是它會匹配所有匹配項。「 這裏解釋:https://stackoverflow.com/questions/12993629/what-is-the-meaning-of-the-g-flag- in-regular-expressions – 2017-10-18 01:47:45

+0

謝謝。正在尋找刪除空白的東西,但無法通過指定空白類型來完成。對字母數字字符使用反轉匹配要容易得多(只要您不需要保留特殊字符)。 – otocan 2018-03-07 11:57:52

3

如果你想更換與最近沒有特殊字符的字符,你可以做這樣的事情:

select 
    translate(
    lower(name), ' ''àáâãäéèëêíìïîóòõöôúùüûçÇ', '--aaaaaeeeeiiiiooooouuuucc' 
) as new_name, 
    name 
from cities; 
相關問題