[R] RegEx avec assertions

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

[R] RegEx avec assertions

#1

Message par jpascal »

Bonjour,

Désolé pour le titre peu explicite.

Je souhaite récupérer des données séparées par un motif, par exemple SEP1, SEP2, SEPx
J'y arrive seulement si le séparateur est un caractère (dans mon exemple µ).

Pouvez-vous m'aider ?

Test()

Func Test()
   Local $aRegExp[0]
   Local $sTxt = ''

   $sTxt = '111dfs11hyt1µ2222rf2ge22µ3r3v33ds33µ44ggrt44v44ee'
   $aRegExp = StringRegExp($sTxt, 'µ([^µ]*)', $STR_REGEXPARRAYGLOBALMATCH)
   _ArrayDisplay($aRegExp)

; NE fonctionnent PAS

   $sTxt = '111dfs11hyt1SEP1e22rf2ge22SEP23v33ds33SEP3dggrt44v44ee'
   $aRegExp = StringRegExp($sTxt, 'SEP\d(.*?)SEP\d', $STR_REGEXPARRAYGLOBALMATCH)
   _ArrayDisplay($aRegExp)

   $aRegExp = StringRegExp($sTxt, '(?<=SEP\d).*', $STR_REGEXPARRAYGLOBALMATCH)
   _ArrayDisplay($aRegExp)

   $aRegExp = StringRegExp($sTxt, '(?:SEP\d).*', $STR_REGEXPARRAYGLOBALMATCH)
   _ArrayDisplay($aRegExp)

   $aRegExp = StringRegExp($sTxt, '(?<=SEP\d)(.*?)(?!SEP)', $STR_REGEXPARRAYGLOBALMATCH)
   _ArrayDisplay($aRegExp)
EndFunc   ;==>Test
Modifié en dernier par jpascal le mer. 28 juil. 2021 16:27, modifié 1 fois.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] RegEx

#2

Message par jchd »

Et comme ça ?

Code : Tout sélectionner

Test()

Func Test()
   Local $sTxt = '111dfs11hyt1SEP1e22rf2ge22SEP23v33ds33SEP3dggrt44v44ee'
   Local $aRegExp = StringRegExp($sTxt, '(.+?)(?:SEP\d|$)', $STR_REGEXPARRAYGLOBALMATCH)
   _ArrayDisplay($aRegExp)
EndFunc   ;==>Test
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] RegEx

#3

Message par jpascal »

Désolé mais ma requête était ambigüe et la syntaxe proposée (?< vous a induit en erreur.

Je souhaite récupérer tous les groupes après le "SEPx" donc :
- e22rf2ge22
- 3v33ds33
- dggrt44v44ee

J'ai tenté ces différents motifs sans succès :
(?>SEP\d)(.+?)
(?>SEP\d)(.+)
(?:SEP\d)(.+?)
(?:SEP\d)(.+)

Et avec celui-ci il me manque logiquement le dernier groupe : (?<=SEP\d)(.+?)(?:SEP)
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] RegEx

#4

Message par jchd »

Je souhaite récupérer des données séparées par un motif, par exemple SEP1, SEP2, SEPx
J'ai répondu à cette contrainte-là.

Maintenant pour la nouvelle contrainte, on peut faire ça :

Code : Tout sélectionner

Test()

Func Test()
   Local $sTxt = '111dfs11hyt1SEP1e22rf2ge22SEP23v33ds33SEP3dggrt44v44ee'
   Local $aRegExp = StringRegExp($sTxt, '(?<=SEP\d).+?(?=SEP\d|$)', $STR_REGEXPARRAYGLOBALMATCH)
   _ArrayDisplay($aRegExp)
EndFunc   ;==>Test
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] RegEx

#5

Message par jpascal »

Cela fonctionne ! C'est magique ! :-)

Comme un imbécile, je ne comprenais pas pourquoi cela fonctionnait avec $ car focalisé sur les assertions, j'ai confondu $ et ^ :oops:

Sachez que cette "fonctionnalité" me manquait jusqu'à présent. Grâce à vous je vais pouvoir améliorer mes scripts.
Je vous dis un grand Merci. :-)
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Répondre