Моя группа может иметь форму x/y, x.y или x_y.z. Каждая группа разделяется символом подчеркивания. Группы неупорядочены.Regex для захвата групп
Пример:
ABC/DEF_abc.def_PQR/STU_ghi_jkl.mno
Я хотел бы, чтобы захватить следующее:
ABC/DEF
abc.def
PQR/STU
ghi_jkl.mno
Я сделал это с помощью достаточно подробная строкой итерации и метод (как показано ниже) разбором, но мне интересно, если простое регулярное выражение может выполнить это.
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;
}
Подчеркивание может быть строка-разделитель а как часть группы? – 2010-12-08 12:49:42
Трудность, кажется, в последнем типе группы (с подчеркиванием в ней). Не могли бы вы немного рассказать о правилах, когда подчеркивание должно быть частью группы, и когда это должен быть символ разделителя? Возможно, вы можете опубликовать свой текущий код. – Jordi 2010-12-08 12:50:17
да, это забавная часть :) Может быть, какой-то способ взглянуть на точку, а затем определить, является ли она делимкой или группой? – dogbane 2010-12-08 12:51:04