j'ai essayé les expressions régulières et sa ne donne rien sa me retourne ceux qui sont sur l'autre ligne...
j'ai essayé les expressions régulières et sa ne donne rien sa me retourne ceux qui sont sur l'autre ligne...
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
27 private void button1_Click(object sender, EventArgs e) { string txt = textBox1.Text; string regexp = @"[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\[\w]*"; string result = string.Empty; Regex rg = new Regex(regexp); // code if (rg.IsMatch(txt)) { int cpt = 0; foreach (Group g in rg.Match(txt).Groups) { if (cpt > 0) { result += "\r\nGROUP " + cpt.ToString() + "\r\n"; foreach (Capture c in g.Captures) { result += c.Value + "\r\n"; } } cpt++; } } label1.Text = result; }
Résultat pour SG_ libre_4 : 31|4@0+ (1,0) [0|15] "" Vector__XXX :
Donc ce qui compte c'est tooujours l'expression régulière, et les données sont dans les collectionsgroup 1, 2, 3 et 4 (Captures 0 à chaque fois)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 GROUP 1 31 GROUP 2 4 GROUP 3 0 GROUP 4 15
c'est sa ce que je n'ai pas compris comment sa marche les groupcollection ?
Dans l'expression :
"[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\[\w]*"
regardes les (...)
tout ce qui se retrouve entre des () correspond à un group, sachant que le groupe 0 correspond à toute la ligne.
Donc ici, j'ai 4 fois des (), soit 5 groupe :
groupe 0 : toute le ligne
groupe 1 : le premier ()
groupe 2 : le second ()
...
ah d'accord c bon merci .
en fait il lit chaque ligne et la relie " match" à chaque groupe dans le regex et pour récupérer ce qu'on veut il reste juste à choisir le group... par contre sa doit marcher pour n'importe quelle ligne ...
oui ca drevrait marcher pour n'importe quelle ligne respoectant le contrat de la regexp
"[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\]\w]*"
, c-a-d :
1) n'importe-quel caractère autre que ":" suivit d'un espace
2) group 1 : au moins un chiffre entre 0-9
3) un "|"
4) group 2 : au moins un chiffre en tre 0-9
5) un "@" suivit de tout sauf un "["
6) group 3 : au moins un chiifre entre 0-9
7) un "|"
8) au moins un chiffre en 0-9
9) un "]"
10) n'importequoi d'autre
oui super ! merci bcp pour ces explications... c'est très sympa de ta part...
de rien. Si ça peut te faire utiliser plus facilement les expressions régulière. Ya rien de mieux pour ce type de travaux, et c'est vraiment pas dur, faut juste connaitre les caractères clé, et un peu de logique.
Bon courage pour demin
c vrai que je galère pour traduire ton code en VB.NET mais bon c très efficace ce ke tu m'a donné vraiment sympa et merci !!
dsl encore mais pour moi sa ne marche pas sous VB!!!
J'ai essayé sa :
je crois ke ce n'est pas normal !!
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 Dim regexp As String = "[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\[\w]*" Dim rg As New RegularExpressions.Regex(regexp) Dim cpt As Integer = 0 Do Do ligne2 = SR.ReadLine() If (rg.IsMatch(ligne2)) Then For Each g In rg.Match(ligne2).Groups result += "\r\nGROUP " + cpt.ToString() + "\r\n" If (cpt > 0) Then For Each c In g.Captures result += c.Value + "\r\n" SW.WriteLine(result) Next c End If cpt += cpt Next g End If Loop Until (str = ligne.IndexOf("BO_")) Loop Until chaine <> ligne2.IndexOf(" SG_")
je dois résoudre ce PB pour l'après midi sinon je suis cuit car sa fait longtemps que je traine là dessus et sa commence à m'ennuyer et m'enerver !!!
je ne récupère pas les nombres... et sa génère pas d'erreur. J'ai l'impression qu'il ne trouve pas ligne qui correspond au regex donc il m'affiche rien tiens regarde ce code ke j'ai écris:J'appelle la fonction pour récupérer le groupe 1 mais j'ai un message box vide...
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
27 Dim g As RegularExpressions.Group Dim c As RegularExpressions.Capture Dim result As String Dim regexp As String = "[^:]*\s([0-9]+)\|([0-9]+)@[^\[]*\[([0-9]+)\|([0-9]+)[\[\w]*" Dim rg As New RegularExpressions.Regex(regexp) Dim cpt As Integer = 0 Dim txt As String Public Function Func2(ByVal line2 As String) As String If (rg.IsMatch(line2)) Then For Each g In rg.Match(line2).Groups result += "\r\nGROUP " + cpt.ToString() + "\r\n" If (cpt > 0) Then For Each c In g.Captures result += c.Value + "\r\n" Next c End If cpt += cpt Next g End If Return rg.Match(line2).Groups(1).Value End Function Do ligne2 = SR.ReadLine() position_bit = Func2(ligne2) MsgBox(position_bit) Loop Until chaine <> ligne2.IndexOf(" SG_") End If
Essai plutot ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Return rg.Match(line2).Groups(1).Value
Mais je connais pas bien le VB.Net
Code : Sélectionner tout - Visualiser dans une fenêtre à part Return rg.Match(line2).Groups(1).Captures(0).Value
cela me génère une exception lors de l'execution.
un avertissement: Specified argument was out of the range of valid values.
Parameter name: i
Sinon autre chose avec les regexp, tu n'ai pas obligé de lire ton fichier en entrée ligne par ligne et pour chaque ligne faire ta regexp, tu peut traiter tout on fichier en regexp avec l'option suivante dans l'objet regexp :
puis dans le code, au lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part Regex rg = new Regex(<expression>, RegexOptions.Multiline);
tu fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part foreach(Group g in rg.Matc(txt).Groups) {...}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 foreach(Match m in rg.Matches(txt)) { foreach(Group g in m.Groups) {...} }
Il sort d'où ce i ???Specified argument was out of the range of valid values.
Parameter name: i
moi aussi je me pose cette question! jai pas de i dans mon code.
mais je crois que c'est pas rapport à l'entrée du regex.. la ligne qu'il lit n'et pas valide ou un truc comme sa ..
moi aussi je me pose cette question! jai pas de i dans mon code.
mais je crois que c'est pas rapport à l'entrée du regex.. la ligne qu'il lit n'et pas valide ou un truc comme sa ..
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager