Bonjour,
j'ai un problème avec les expressions régulières en Java... Normalement, j'ai l'habitude de les utiliser ailleurs mais là, je bloque complètement! J'ai regardé le tutorial de cyberzoide, je pense l'avoir compris mais je n'y arrive pas!
Alors voici le texte que j'étudie:
Dans ce texte, je veux d'abord extraire ce qu'il y a entre les balises, leur ordre n'est pas forcément là. Pour cela, j'utilise les expressions suivantes:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 Un exemple illustrera chaque définition. <--1 Debut de la table des charges de travail par mois--> 420 415 355 345 160 95 380 395 270 230 310 420 <--Fin de la table des charges de travail par mois--> Exemple: 420 415 355 345 160 95 380 395 270 230 310 420 Chaque ligne correspond à un mois, Janvier pour la première, Décembre pour la dernière. <--2 Debut de la table des temps de travail estime par mois et par type d'elevage--> 1.4 1.8 1.5 1.4 1.4 9.8 2.4 1.4 1.4 1.4 4.0 0.4 1.4 1.4 1.4 2.8 0.6 1.3 1.4 1.5 2.2 0.4 1.3 1.5 1.2 2.2 0.4 1.3 1.3 1.2 2.2 0.6 1.3 1.3 1.2 2.6 5.8 1.5 1.5 1.2 0.6 4.0 1.3 0 0 0.6 1.2 1.3 1.3 2.6 0.6 1.8 1.2 1.2 1.2 0.6 1.8 1.5 1.4 1.4 <--Fin de la table des temps de travail estime par mois et par type d'elevage--> Exemple: 1.4 1.8 1.5 1.4 1.4 9.8 2.4 1.4 1.4 1.4 4.0 0.4 1.4 1.4 1.4 2.8 0.6 1.3 1.4 1.5 2.2 0.4 1.3 1.5 1.2 2.2 0.4 1.3 1.3 1.2 2.2 0.6 1.3 1.3 1.2 2.6 5.8 1.5 1.5 1.2 0.6 4.0 1.3 0 0 0.6 1.2 1.3 1.3 2.6 0.6 1.8 1.2 1.2 1.2 0.6 1.8 1.5 1.4 1.4 Chaque ligne correspond à un mois et chaque colonne à un type d'élevage.
Et ensuite, avec les données capturées par le "(.+?)", je veux capturer chaque valeur numérique. Comme ces valeurs ont un format prédéfini, j'utilise les expressions suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 private Pattern patternChargeTravail = Pattern.compile("<--1.Debut.*?-->(.+?)<--Fin",Pattern.MULTILINE); private Pattern patternTempsEstime = Pattern.compile("<--2.Debut.*?-->(.+?)<--Fin",Pattern.MULTILINE);
Le problème, c'est qu'avec mon code, je n'arrive pas à matcher mes balises
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 private Pattern patternChargeTravailV = Pattern.compile("(^\\s*(\\d+)\\s*$){12}",Pattern.MULTILINE); private Pattern patternTempsEstimeV = Pattern.compile("(^(\\s*(\\d+)\\s*){5}$){12}",Pattern.MULTILINE);![]()
Je ne sais pas pourquoi je n'arrive pas à matcher ce que je veux... et c'est pour ça que je demande votre aide.
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 public void buildChargeTravail() { matcherBalise = patternChargeTravail.matcher(texteBrut.toString()); if (!matcherBalise.find(0)){ System.err.println("Donnees sur la charge de travail non trouvees!"); System.exit(2); } System.out.println(matcherBalise.group()); matcherValeurs = patternChargeTravailV.matcher(matcherBalise.group()); if (!matcherValeurs.find(0)){ System.err.println("Donnees sur la charge de travail mal écrites!"); System.exit(3); } tableChargeTravail = new float[12]; System.out.println("CdT: "+matcherValeurs.group()); }
Merci d'avance, c'est assez urgent(enfin, j'ai encore une semaine mais je veux de la marge pour finaliser le reste, c'est la partie la plus simple de mon projet).
Partager