2015-01-28 2 views
-1

Я пытаюсь определить лучший регулярное выражение, чтобы захватить текст из набора значений в следующем примере строки:Захват текста между 2 специальных символов с использованием регулярных выражений

Floor: 05; Suite: CPO 5th Floor; Abbrv: CAN-ON-Toronto-CPO5; M9V 1H5 
Floor: 05; Suite: CPO 5th Floor; Abbrv: CAN-ON-Toronto-CPO5; M9V 1H5 
Floor: 04; Suite: CPO 4th Floor; Abbrv: CAN-ON-Toronto-CPO4; M9V 1H5 
Floor: 2; Suite: SOC 2nd Floor; Abbrv: CAN-ON-Scarborough-SOC2; M1H 2X3 

Например мне нужно захватить следующие из выше текст:

CPO 5th Floor 
CPO 5th Floor 
CPO 4th Floor 
SOC 2nd Floor 

в принципе мне нужно, чтобы захватить весь текст между Suite: и ; за исключением первого пробела.

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

+1

Это довольно прямо вперед, вы пытались что-нибудь? (Это можно сделать и без регулярного выражения) – anubhava

+0

Есть ли каждая из этих строк или это все одна строка? –

ответ

2
String str = " Floor: 05; Suite: CPO 5th Floor; Abbrv: CAN-ON-Toronto-CPO5; M9V 1H5 " 
      + " Floor: 05; Suite: CPO 5th Floor; Abbrv: CAN-ON-Toronto-CPO5; M9V 1H5 " 
      + " Floor: 04; Suite: CPO 4th Floor; Abbrv: CAN-ON-Toronto-CPO4; M9V 1H5 " 
      + " Floor: 2; Suite: SOC 2nd Floor; Abbrv: CAN-ON-Scarborough-SOC2; M1H 2X3"; 

// Pattern: Suite:[ ]*([^;]*); 
// Which means: 
// Suite:  - first the string "Suite:" 
// [ ]*  - followed by any amount of whitespace 
// ([^;]*)  - then a capture group that will contain any 
//     amount of characters except ";" 
// ;   - then the character ; 
Pattern pattern = Pattern.compile("Suite:[ ]*([^;]*);"); 
Matcher matcher = pattern.matcher(str); 
while(matcher.find()){ 
    String match = matcher.group(1); // first capture group 
    System.out.println(match); 
} 

Печать:

CPO 5th Floor 
CPO 5th Floor 
CPO 4th Floor 
SOC 2nd Floor 
Смежные вопросы