Message posté par : Jérémie
----------------------------------------
J'ai essayé quelque chose qui pourrait t'aller, avec regexp_matches.
-----------------
Code :
regexp_matches( replace(fullname,'(x) ',''),'^([a-zA-Z0-9_]+)
([a-zA-Z0-9_]*) ?(_.+)*$')
-----------------
Permet de récupérer une liste de toutes les chaînes repérées par l'expression
rationnelle.
J'ai remplacé le (x) et l'espace qui le suit par une chaine vide pour ne pas à
avoir à le gérer dans l'expression rationnelle. J'espère que j'ai bien compris
et que tu ne souhaitais pas le récupérer dans tes champs ?
L'expression rationnelle récupère 3 groupes (ce sont les parenthèses qui servent à
faire les groupes) qu'on récupère dans une liste :
- genus = le premier groupe de lettres ou chiffres [a-zA-Z0-9_]+ le ^ servant à indiquer
que c'est le début de la ligne et le + pour indiquer 1 à n répétitions de lettres ou
chiffres
- species = le deuxième groupe de lettres ou chiffres (mais peut aussi être vide,
c'est à ça que sert le * : 0 à n répétitions de lettres ou chiffres)
- cultivar = après une deuxième espace optionnelle (?) on a à la suite un underscore suivi
de n'importe quel caractère (.) répété entre 1 et n fois (+). Cet ensemble peut être
présent 0 à n fois (*) et enfin fin de ligne ($)
Ensuite, pour récupérer le bon groupe, tu peux utiliser le array_get() :
Pour genus
-----------------
Code :
array_get(regexp_matches( replace(fullname,'(x)
',''),'^([a-zA-Z0-9_]+) ([a-zA-Z0-9_]*) ?(_.+)*$'),0)
-----------------
Pour species
-----------------
Code :
array_get(regexp_matches( replace(fullname,'(x)
',''),'^([a-zA-Z0-9_]+) ([a-zA-Z0-9_]*) ?(_.+)*$'),1)
-----------------
Pour cultivar
-----------------
Code :
regexp_replace(array_get(regexp_matches( replace(fullname,'(x)
',''),'^([a-zA-Z0-9_]+) ([a-zA-Z0-9_]*)
?(_.+)*$'),2),'[_'']','')
-----------------
J'ai ajouté un regexp_replace qui remplace les underscore et les quotes par une chaîne
vide.
En espérant que ça réponde à ta problématique.
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=362487#p362487
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