2010-12-13 73 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; 
相关问题