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