#1 Mon 05 October 2020 10:42
- ckiko13
- Participant assidu
- Date d'inscription: 20 Feb 2007
- Messages: 363
[Postgres 12] regex_replace: enlever espaces vides
Bonjour
Dans une table, je souhaiterais enlever des espaces vides entre des virgules ou à la fin de la ligne.
Pour ce faire, j'utilise cette expression:
Code:
select REGEXP_REPLACE (nom_prop,'/\s+/',' ') from parc_group_proprio;
Où nom_prop = champ concerné & parc_group_proprio = ma table
Par exemple, de cet enregistrement:
BONNA/AUGUSTE , ,019 RUE COTE ,26000 VALENCE
Je souhaite obtenir cela:
BONNA/AUGUSTE,019 RUE COTE,26000 VALENCE
J'essaye plusieurs variantes de mon expression régulière
'\\s+'
'\\s+'
'/ss+/'
, mais rien ne semble fonctionner.
Auriez-vous une idée pour reformuler correctement mon expression?
Merci
Hors ligne
#2 Mon 05 October 2020 11:08
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [Postgres 12] regex_replace: enlever espaces vides
Bonjour,
Il faut ajouter l'option 'g' (greedy) à regexp_matches, je pense. Ca dit de faire le remplacement sur tous les caractères que la regexp matche, et pas seulement le dernier.
Dans votre exemple, il y a aussi des virgules sans texte entre.
Ca doit aussi pouvoir se traiter par regexp.
Un exemple avec la regexp pour les espaces, puis des replace pour le formatage des virgules:
Code:
select 'BONNA/AUGUSTE , ,019 RUE COTE ,26000 VALENCE', replace( replace( regexp_replace( 'BONNA/AUGUSTE , ,019 RUE COTE ,26000 VALENCE', '\s+', ' ', 'g'), ' ,', ', ' ), ', , ', ', ' );
Nicolas
Hors ligne
#3 Mon 05 October 2020 11:33
- ckiko13
- Participant assidu
- Date d'inscription: 20 Feb 2007
- Messages: 363
Re: [Postgres 12] regex_replace: enlever espaces vides
Cette requête là fonctionne bien:
Code:
update parc_group_proprio set nom_prop = replace( regexp_replace(nom_prop,'\s+', ' ', 'g'), ', ,',', ') ;
Que signifie le 'g' greedy?
Merci
Hors ligne
#4 Tue 06 October 2020 09:58
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: [Postgres 12] regex_replace: enlever espaces vides
Salut,
le flag g signifie global, toutes les occurrences de \s+ seront remplacées :
avec g :
"les shaddocks pompaient"->"lesshaddockspompaient"
sans g:
"les shaddocks pompaient"->"lesshaddocks pompaient"
Hors ligne