cs_arc59
Messages postés32Date d'inscriptionmardi 15 janvier 2002StatutMembreDernière intervention24 mars 2011
-
23 mars 2011 à 12:19
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
24 mars 2011 à 15:11
Bonjour,
je cherche a faire une reg exp permettant de chercher dans une chaine composée de plusieurs zones de taille fixe dont la longueur et la position sont connues, une ou plusieurs valeurs.
La / Les valeur fournit n'est pas forcément complète, on fait donc une recherche de type contient dans chaque zone.
Exemples de chaine à analyser:
0123456789DurandxxxxxxxxxxxxxxJeanxxxxxxxxxxxxxxxx01234567890123456789012345
OU
0123456789xxxxxxDurandxxxxxxxxxxxxJeanxxxxxxxxxxxx01234567890123456789012345
OU
0123456789xxxxxxxxxxxxxxDurandxxxxxxxxxxxxxxxxJean01234567890123456789012345
...
La zone contenant le nom est sur 20 caractères et commence à la position 11.
La zone contenant le prénom est sur 20 caractères et commence à la position 31.
Si on cherche une seule des 2 zones, par exemple le prénom. Je génère cette expression:
.{30}.{0,16}Jean
On se place à la position 31 et on fait un match si l'expression contient 0 à 16 caractères quelconque suivi du prénom Jean.
Pas de problème avec cette expression. Ca permet de trouver la valeur Jean n'importe où dans la zone.
Maintenant, si je dois chercher nom et prénom, l'expression générée est:
(.){10}.{0,14}Durand.{0,16}Jean
or dans la 1ere ligne d'exemple, Durand n'est pas préfixé par des espaces mais suffixé. On trouve donc le nom directement, préfixé par 0 espace.
La reg exp ne match pas car on cherche le prénom au mauvais endroit.
J'ai eu plusieurs piste pour solutionner ce problème mais pour l'instant, je n'ai pas trouvé de solution qui fonctionne dans tous les cas.
Pour info, la reg exp sera générée par code.
J'espère que l'un d'entre vous pourra m'aider.
A voir également:
Recherche type contient dans plusieurs zone de taille fixe
cs_arc59
Messages postés32Date d'inscriptionmardi 15 janvier 2002StatutMembreDernière intervention24 mars 2011 24 mars 2011 à 14:30
Merci, ca à l'air intéressant. Je vais faire quelque recherche pour comprendre un peu plus comment marche le ?= car ta solution ne résout pas complètement mon problème, les 2 zones de recherche pouvant ne pas être contigue. J'aimerai pouvoir faire des recherches sur des zones bien délimitées (les zones nom et prénom étant des exemples).
Par exemple, la ligne serait composée de 10 zones dont les longueurs sont respectivement 5 10 20 40 80 5 10 20 40 80
Le problème à résoudre: Comment chercher la valeur Durand dans la zone 3 et Jean dans la zone 8 et uniquement dans ces zones, la valeur étant à chercher dans l'intégralité de la zone, soit du 20 caractères ?
cs_arc59
Messages postés32Date d'inscriptionmardi 15 janvier 2002StatutMembreDernière intervention24 mars 2011 24 mars 2011 à 15:06
Je n'avais pas tout compris mais c'est bien ce qu'il faut utiliser, ta solution est valable.
En fait, il faut que je l'utilise par zone. Si je reprend l'exemple du post précédent, je dois générer cette expression:
^(.{15}(?=.{0,14}Durand).{20}.{135}(?=.{0,16}Jean).{20})$
Merci beaucoup
Vous n’avez pas trouvé la réponse que vous recherchez ?