Question

Je veux analyser une chaîne de 12 (souvent) flotteurs différents dans une rangée (avec un texte non pertinent devant, marquant un champ), et que vous voulez tous pour finir dans un groupe de capture de leur propre, de manière à les recueillir de l'matcher un à la fois. Je l'ai remarqué que je suis réussissais en écrivant ce qui suit:

Pattern lastYearIncomePattern = Pattern.compile("(.+\\{\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)");

qui est une masse épuisante de code dupliqué. Le ([0-9]{1,2}\\.[0-9]{3}\\s) partiel se produira 12 fois.

Est-il possible de le faire mieux? Je l'ai regardé sur la définition de cette chaîne pour lui-même, puis l'ajouter dans la regex via une boucle et un StringBuilder, mais tout cela semble si exagéré. Il est évident que les références arrières ne fonctionne pas non plus, puisque les 12 valeurs sont différentes.

Ma première approche a consisté à écrire ([0-9]{1,2}\\.[0-9]{3}\\s){12}, mais cela mettra les 12 chars dans une longue chaîne, et ce n'est pas ce que je veux, comme je l'aurais besoin d'un autre modèle pour enlever les flotteurs un par un puis, puis la solution en double-frénésie est préférée.

Merci

Était-ce utile?

La solution

Que diriez-vous ceci:

Pattern lastYearIncomePattern = java.util.regex.Pattern.compile("(.+\\{\\s)(([0-9]{1,2}\\.[0-9]{3}\\s){12})");

Matcher matcher = lastYearIncomePattern.matcher(input);
boolean found =matcher.find();
if(found){
  String[] values= matcher.group(2).split("\\s");
}

Il fonctionne. Ce serait intéressant de voir si cela peut être fait dans un op comme vous espériez.

Autres conseils

Vous pouvez écrire l'expression rationnelle d'un seul flotteur, puis utilisez Matcher.find (int) pour itérer les occurrences.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top