Mon groupe peut être de la forme x/y, x.y ou x_y.z. Chaque groupe est séparé par un trait de soulignement. Les groupes sont non ordonnés.Regex pour capturer des groupes
Exemple:
ABC/DEF_abc.def_PQR/STU_ghi_jkl.mno
je voudrais saisir les éléments suivants:
ABC/DEF
abc.def
PQR/STU
ghi_jkl.mno
Je l'ai fait en utilisant une méthode itération de chaîne assez bavard et l'analyse syntaxique (ci-dessous), mais me demande si une simple regex peut accomplir cela.
private static ArrayList<String> go(String s){
ArrayList<String> list = new ArrayList<String>();
boolean inSlash = false;
int pos = 0 ;
boolean inDot = false;
for(int i = 0 ; i < s.length(); i++){
char c = s.charAt(i);
switch (c) {
case '/':
inSlash = true;
break;
case '_':
if(inSlash){
list.add(s.substring(pos,i));
inSlash = false;
pos = i+1 ;
}
else if (inDot){
list.add(s.substring(pos,i));
inDot = false;
pos = i+1;
}
break;
case '.':
inDot = true;
break;
default:
break;
}
}
list.add(s.substring(pos));
System.out.println(list);
return list;
}
Le trait de soulignement peut être délimiteur comme ainsi dans le cadre d'un groupe ?? –
La difficulté semble être dans le dernier type de groupe (avec le trait de soulignement). Pourriez-vous élaborer un peu sur les règles pour savoir quand un trait de soulignement devrait faire partie d'un groupe, et quand il devrait être le caractère de séparation? Peut-être pourriez-vous poster votre code actuel. – Jordi
oui, c'est la partie amusante :) Peut-être un moyen de regarder en avant pour un point et ensuite déterminer s'il s'agit d'un delim ou d'un groupe? – dogbane