Bonjour,

je dispose d'une chaine aléatoire de 8 chiffres. J'aimerais en la lisant de gauche à droite, repérer la première séquence consécutive ou non de 3 chiffres pouvant constituer un angle entier (0-360°) non multiple de 30. (Un "021" par exemple est accepté).

La regEx que j'utilise est la suivante : '([3])[6-9]*([0-5][0-9])|([0-2][0-9]{2})'

Le code :
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
17
18
19
20
21
22
23
24
25
26
// uses System.RegularExpressions;
procedure TForm1.Button3Click(Sender: TObject);
const
  randomstring = '98396248';                             //Résultat attendu : 324
  regexstring = '([3])[6-9]*([0-5][0-9])|([0-2][0-9]{2})';
var
  regex: TRegEx;
  match: TMatchCollection;
  groupe: TGroupCollection;
  i, j: Integer;
  stmp: string;
begin
  regex := TRegEx.Create(regexstring);
  match := regex.Matches(randomstring);
  if match.Count > 0 then
  begin
    i := 0; // Le premier résultat
    groupe := match.Item[i].Groups;
    stmp := '';
    { 3 groupes : 0 Full, 1 : Grp 1, 2 : Grp 2 }
    for j := 1 to groupe.Count - 1 do
      stmp := stmp + groupe.Item[j].Value;
    stmp := randomstring + '->' + stmp;
    Memo1.Lines.Add(stmp)
  end;
end;
Cela fonctionne et je traite ensuite le résultat de la regEx par un filtre avec un modulo. Comme je cherche toujours à élargir un peu mes connaissances, je me demandais si on pouvait de manière élégante exclure les multiples de 30 dans la regEx elle-même.

Merci. Cordialement. Gilles