Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Mon 05 October 2020 10:42

ckiko13
Participant assidu
Date d'inscription: 20 Feb 2007
Messages: 361

[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: 1536

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: 361

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: 1132

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

 

Pied de page des forums

Powered by FluxBB