[Pattern] Des expressions qui ne jouent pas à la régulière!
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:
Code:
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. |
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:
1 2 3
|
private Pattern patternChargeTravail = Pattern.compile("<--1.Debut.*?-->(.+?)<--Fin",Pattern.MULTILINE);
private Pattern patternTempsEstime = Pattern.compile("<--2.Debut.*?-->(.+?)<--Fin",Pattern.MULTILINE); |
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:
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); |
Le problème, c'est qu'avec mon code, je n'arrive pas à matcher mes balises :cry:
Code:
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());
} |
Je ne sais pas pourquoi je n'arrive pas à matcher ce que je veux... et c'est pour ça que je demande votre aide.
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).