Bonjour,
depuis l'apparition de FMX et plus de TMaskedit j'utilise de plus en plus les expressions régulières (une nouvelle marotte )
cette fois ci je voudrais exploiter une chaine de caractères bien particulière pour extraire 3 groupes il y a bien sur d'autres méthodes ( à coup de pos, copy et delete) mais je me suis dit que puisque regex il y avait pourquoi ne pas tester.
Pour faire simple soit une chaine *ACASTELO-220360 je veux obtenir les groupes ACASTELO, 220, 360
sachant que le * peut aussi être un ? et que le tiret est obligatoire et qu'il y a 6 chiffres ensuite (pour l'instant en tout cas)
j'ai construit mon expression ainsi
ce qui fonctionne ! (ça c'est pour répondre à une discussion lorsque j'ai recherché sur le forum)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 var modele,assort,point : String; UneExpression : TRegEx; UnEnsemble : TMatch; begin UneExpression:=TRegEx.Create('[*?](.{1,15}){1}[-](\d{3}){1}(\d{3}){1}',[]); if UneExpression.IsMatch(Saisie.Text) then begin UnEnsemble:=UneExpression.Match(saisie.Text); Modele:=UnEnsemble.Groups.Item[1].Value; Assort:=UnEnsemble.Groups.Item[2].Value; Point:=UnEnsemble.Groups.Item[3].Value; end else showmessage('erreur'); end;
cependant et c'est là ma question j'ai été incapable d'utiliser Split plutôt que Match , ce qui m'aurait semblé plus commode je ne vois pas comment faire
en fait je n'obtiens dans mon tableau via le Split que : '','360','' et je me demande où je foire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 var modele,assort,point : String; UneExpression : TRegEx; MonSplit : TArray<String>; begin UneExpression:=TRegEx.Create('[*?](.{1,15}){1}[-](\d{3}){1}(\d{3}){1}',[]); if UneExpression.IsMatch(Saisie.Text) then begin MonSplit:=UneExpression.Split(saisie.Text); Modele:= ? Assort:= ? Point:= ? end else showmessage('erreur'); end;
Partager