2013-12-23 8 views
-3

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

A [B C] "D E F" 

в 3 строки

  1. A

  2. B C

  3. D E F

где А, В, С, D, Е, F представляют собой набор буквенно-цифровых символов и может или не может включать в себя специальные символы, такие как +: /._- т.д.

Я пытался что-то подобный: [[a-zA-Z0-9/: +]+]\s"[a-zA-Z0-9._/?&=-]+"\s[a-zA-Z0-9-]+.

Но это возвращает один признанный паттерн, когда я использую классы Java и Matcher. Я хочу получить 3 группы.

+1

Вы пробовали что-нибудь? –

+1

Прошу сделать домашнее задание – Bohemian

+0

Я пробовал что-то вроде: [[a-zA-Z0-9 /: +] + \] \ s "[a-zA-Z0-9 ._ /? & = -] +" \ с [A-Za-z0-9 -] +. Но это возвращает один признанный шаблон, когда я использую классы Java и Matcher. Я хочу получить 3 группы. – user180908

ответ

2

Если я правильно понимаю вашу попытку правильно ответ может быть довольно просто:

String test = "A [B C] \"D E F\""; 
//       | any number of characters (group 1) followed by... 
//       | | one whitespace, followed by 
//       | | | left square bracket, f.b... 
//       | | | | any number of characters (group 2), f.b... 
//       | | | | | right square bracket, f.b... 
//       | | | | | | one whitespace, f.b... 
//       | | | | | | | one double quote, f.b... 
//       | | | | | | | | any number of characters (group 3) f.b... 
//       | | | | | | | | | one double quote 
Pattern p = Pattern.compile("(.+?)\\s\\[(.+)\\]\\s\"(.+?)\""); 
Matcher m = p.matcher(test); 
if (m.find()) { 
    System.out.println(m.group(1)); 
    System.out.println(m.group(2)); 
    System.out.println(m.group(3)); 
} 

Выхода

A 
B C 
D E F 

Примечание

Заменить символы точечных с классами или другими обобщениями если вы хотите, чтобы более конкретные диапазоны символов были сопоставлены вашим группам 1, 2 и 3.

+0

Спасибо, что сработал. не использовал операторы групп (&). Еще раз спасибо. – user180908

+0

@ user180908 приветствую :) – Mena

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