2012-08-26 6 views
1
(W[AY]|C[AO])(\\s+\\d{5}) 

Таким образом, в настоящее время он анализирует состояния, начинающиеся с W или C, за которым следует почтовый индекс. Тем не менее, он возвращает их все в одну группу, как и в примере WA 98121 CA 56679 возвратит Group 1 WA 98121 и группа 2 является CA 56679.Как исправить это регулярное выражение?

Как это исправить, чтобы получить в group1 WA group2 98121 group3 CA group4 56679

+0

Какой метод вы используете для выполнения регулярного выражения? – nneonneo

+0

matcher.group() – Phoenix

+0

Каждый матчи должен совпадать с одной комбинацией состояний-закладок. Попробуйте взглянуть на группу (1), группу (2). – nneonneo

ответ

5

Обычно вы хотите захватить все части поисковой фразы в одном матче и разбить части фразы с помощью групп, справиться с совпадением, а затем снова совместить следующую фразу. Итак, я собираюсь обойти ваш вопрос, показывая вам, как кодировать, используя этот подход.

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

// Regex to match a "state zip" sequence, and capture each part in its own group 
String regex = "(W[AY]|C[AO])\\s+(\\d{5})"; 

// Some sample input 
String input = "blah blah WA 98121 blah blah CA 56679 blah blah"; 

Matcher matcher = Pattern.compile(regex).getMatcher(input); 
while (matcher.find()) { // move to next match, if one exists 
    String state = matcher.group(1); 
    String zip = matcher.group(2); 
    // Work with state and zip values 
    System.out.println("State = " + state + ", zip = " + zip); 
} 

Выход:

State = WA, zip = 98121 
State = CA, zip = 56679 


Обратите внимание, что захватило регулярные выражения групп пронумерованы от 1.
FYI, группа 0 - полный матч.

Смежные вопросы