Page 1 sur 1

[R] RegEx avec assertions

Posté : mer. 28 juil. 2021 12:18
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

Re: [..] RegEx

Posté : mer. 28 juil. 2021 14:43
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

Re: [..] RegEx

Posté : mer. 28 juil. 2021 15:21
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)

Re: [..] RegEx

Posté : mer. 28 juil. 2021 16:12
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

Re: [..] RegEx

Posté : mer. 28 juil. 2021 16:25
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. :-)