Message posté par : Jérémie
----------------------------------------
Bonjour,
Il semble opportun d'utiliser les expressions rationnelles dans ce cas.
L'expression suivante vous permet de récupérer la première valeur entre crochets :
-----------------
Code :
array_get(regexp_matches(
replace(replace("champ",'[','#'),']','#'),'.*#(.*)#.*#(.*)#.*'),0)
-----------------
Et celle-ci la deuxième valeur :
-----------------
Code :
array_get(regexp_matches(
replace(replace("champ",'[','#'),']','#'),'.*#(.*)#.*#(.*)#.*'),1)
-----------------
Je me suis cassé les dents sur l'expression à cause des crochets qui sont utilisés
dans les expressions pour regrouper un ensemble de caractères à trouver dans la chaine, du
coup je les convertis en # avant avec les deux replace().
L'expression utilisée est donc uniquement :
-----------------
Code :
'.*#(.*)#.*#(.*)#.*'
-----------------
Qui correspond à :
* -> n'importe quel caractère répété 0 à n fois
# -> un caractère # (correspond au [ remplacé via la fonction replace)
(.*) -> groupe de capture ( ) contenant n'importe quel caractère répété 0 à n fois
.*
# -> un caractère # (correspond au ] remplacé via la fonction replace)
* -> n'importe quel caractère répété 0 à n fois
# -> un caractère # (correspond au [ remplacé via la fonction replace)
(.*) -> groupe de capture ( ) contenant n'importe quel caractère répété 0 à n fois
.*
# -> un caractère # (correspond au ] remplacé via la fonction replace)
* -> n'importe quel caractère répété 0 à n fois
L'expression est appelée avec la fonction regexp_matches() qui renvoie une liste de
résultat, en l'occurrence les deux valeurs entre crochets (qui correspondent aux deux
groupes de capture entre parenthèses).
La fonction array_get() permet de récupérer la première (0) ou la deuxième (1) valeur.
En espérant que ce soit clair pour vous.
Pour plus d'infos sur les regex (expressions rationnelles), voir le site
https://regex101.com/ par exemple
Voici un de vos exemples avec l'expression que je propose :
https://regex101.com/r/2m5x2Y/1
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=365848#p365848
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net