2013-03-15 2 views
1

Я хочу разделить фразу используя конкретные слова в качестве разделителейСамостоятельное предложение с помощью Regex

Lun. 08:00 - 12:15 13:15 - 16:15 Mar. 08:00 - 12:15 13:15 - 16:15 Mer. 08:00 - 12:15 13:15 - 16:15 Jeu. 08:00 - 12:15 13:15 - 16:15 Ven. 08:00 - 12:15 13:15 - 16:15 "; 

в результате я хочу иметь список, как это:

Lun. 08:00 - 12:15 13:15 - 16:15 
Mar. 08:00 - 12:15 13:15 - 16:15 
Mer. 08:00 - 12:15 13:15 - 16:15 
Jeu. 08:00 - 12:15 13:15 - 16:15 
Ven. 08:00 - 12:15 13:15 - 16:15 

Я начал с ниже регулярным выражением:

final Pattern pattern = Pattern.compile("((Lun|Mar|Mer|Jeu|Ven|Sam). [0-9 \\-:]*)"); 
final Matcher matcher = pattern.matcher(horaires); 
while (matcher.find()) 
{ 
    myListe.add(matcher.group()) 
} 

Но это дает мне результат:

matcher.group(1) = Lun. 08:00 - 12:15 13:15 - 16:15 matcher.group(2) = Lun. 08:00 - 12:15 13:15 - 16:15 

Может ли кто-нибудь из вас помочь мне, если вы найдете правильное регулярное выражение?

+0

ваше регулярное выражение отлично работает для меня. он дает желаемый результат – PermGenError

+1

Мое регулярное выражение было в порядке! На самом деле, как я извлек результат, было не так хорошо, а не matcher.group (1), я сделал matcher.group() Спасибо, хотя за ваш ответ! –

ответ

0

Попробуйте изменить то, что вам нужно это:

 String string = "Lun. 08:00 - 12:15 13:15 - 16:15 Mar. 08:00 - 12:15 13:15 - 16:15 Mer. 08:00 - 12:15 13:15 - 16:15 Jeu. 08:00 - 12:15 13:15 - 16:15 Ven. 08:00 - 12:15 13:15 - 16:15 "; 
     final Pattern pattern = Pattern.compile("((Lun|Mar|Mer|Jeu|Ven|Sam)\\. [0-9 \\-:]*)"); 
     final Matcher matcher = pattern.matcher(string); 
     List<String> list = new ArrayList<String>(); 
     while (matcher.find()) 
     { 
      list.add(matcher.group(1)); 
     } 

     for(String str : list) 
     { 
      System.out.println(str); 
     } 

Урожайность:

Лунь. 08:00 - 12:15 13:15 - 16:15
Март 08:00 - 12:15 13:15 - 16:15
Мер. 08:00 - 12:15 13:15 - 16:15
Jeu. 08:00 - 12:15 13:15 - 16:15
Ven. 08:00 - 12:15 13:15 - 16:15

EDIT: Кажется, что я неспособен повторить ситуацию, когда ваш код не работает (мне удалось сделать это один, но не могу показаться сделать это снова ...). Ваш код работал на моей машине, так же как и выше.

Вы можете попробовать, что я предложил в качестве альтернативного подхода, поэтому ответ не будет удален, по крайней мере, пока.

+0

Поскольку op принял этот ответ, кажется, что он всего лишь хотел целую строку, и в этом случае он также мог бы использовать matcher.group (0) и изменить выражение на «(?: Lun | Mar | Mer | Jeu | Ven | Sam) . [0-9 \\ -:] * " – msam

+0

Это тоже работает, но на самом деле использование matcher.group (0) или matcher.group (1) дает те же результаты. –

0

Ваше регулярное выражение правильно! Я его реализовал. Он дает тот же результат, который вам нужен.
См this demo program.

final Pattern pattern = Pattern.compile("((Lun|Mar|Mer|Jeu|Ven|Sam). [0-9 \\-:]*)"); 
final Matcher matcher = pattern.matcher(horaires); 
while (matcher.find()) 
{ 
    myListe.add(matcher.group()) 
} 

//Iterate your list. 
for (String str : myListe) { 
     System.out.println(str); 
} 

Это дает выход:

Lun. 08:00 - 12:15 13:15 - 16:15 
Mar. 08:00 - 12:15 13:15 - 16:15 
Mer. 08:00 - 12:15 13:15 - 16:15 
Jeu. 08:00 - 12:15 13:15 - 16:15 
Ven. 08:00 - 12:15 13:15 - 16:15 

Может быть, вы забыли перебирать список "myListe" данных & использование matcher.group() вместо matcher.group (1).

+0

Да, это именно то, что произошло, спасибо за ваш ответ! –