web-dev-qa-db-ja.com

postgres regexp_replaceはa-zとA-Zのみを許可したい

文字列のテーブル列には、数字/特殊文字/空白を含めることができます。数字/特殊文字/空白を空の文字に置き換えたい、regexp_replaceという名前の関数がありますが、次の文字列を使用したいなど、ユーザーフレンドリーなヘルプをあまり使用しない方法があります。

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

上記の文字列からすべての特別な文字と数字を削除したいのですが、a-zA-Zのみを許可したいのですが、残りの文字は''に置き換える必要がありますか?

25
d-man
select regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]', '', 'g')
54
user533832

私にとっては、次のように働いた。

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

グローバルフィルターを追加して、文字列全体に対して正規表現を繰り返します。

例、

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

戻り値:「WellThis Did-Not work&*($ %%)_」

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

戻り値:「WellThisDidNotwork」

削除したくない文字があります。

11
Liam Mitchell

簡単にするために:

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

Charを最も近い特殊なcharに置き換えたい場合は、次のようなことができます:

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

する必要があります:

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