web-dev-qa-db-fra.com

postgres regexp_replace veut autoriser uniquement les z-et les a-z

Dans une colonne de table dans une chaîne, nous pouvons avoir des nombres/caractères spéciaux/espaces blancs . Je veux remplacer des chiffres/caractères spéciaux/espaces blancs par des caractères vides, je vois qu'il existe une fonction nommée regexp_replace mais comment utiliser de manière peu conviviale help avaialble par exemple, je veux utiliser la chaîne suivante.

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

Je veux supprimer tous les caractères spéciaux et les chiffres de la chaîne ci-dessus. Permettre uniquement a-z et A-Z. Le reste des caractères doit être remplacé par ''. Comment procéder?

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

Pour moi, ce qui suit a fonctionné.

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

Comme il ajoute un filtre global, il répète l'expression régulière pour toute la chaîne.

Exemple,

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

Retourne: "WellThis n'a pas fonctionné & * ($ %%) _"

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

Renvoie: "WellThisDidNotwork"

Qui a les caractères que nous ne voulons pas enlever.

9
Liam Mitchell

Pour simplifier les choses:

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

Si vous voulez remplacer le caractère par le caractère le plus proche, pas spécial, vous pouvez faire quelque chose comme ceci:

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

Devrait être:

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