Страницы

Поиск по вопросам

понедельник, 3 февраля 2020 г.

Java. String.split(Regex) Парсинг строки

#java #регулярные_выражения #split


Дается строка, которую нужно распарсить на составные части

String line = "param1 param2 'param3 param3 param3' param4";
String[] params = line.split("Регулярное выражение");


На выходе params должен разбиваться по пробелу и по 'тексту в кавычках':
То есть:

param1
param2
param3 param3 param3
param4


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

String[] params = line.split("[\\s(^'.'$)]");

    


Ответы

Ответ 1



Еще вариант: String line = "param1 param2 'param3 param3 param3' param4"; System.out.println(Arrays.asList(line.replaceAll("\'", "").split("'?(\\s|$)(?=(([^']*'){2})*[^']*$)'?"))); // [param1, param2, param3 param3 param3, param4] С использованием apache-commons-lang StrTokenizer tokenizer = new StrTokenizer(line, ' ', '\''); while(tokenizer.hasNext()) { System.out.println(tokenizer.nextToken()); } // param1 // param2 // param3 param3 param3 // param4 Последний вариант (честно стырено отсюда): ArrayList list = new ArrayList(); Matcher m = Pattern.compile("((?<=')[^']*(?='(\\s|$)+)|(?<=\\s|^)[^\\s']*(?=\\s|$))").matcher(line); while ( m.find() ) { list.add(m.group(1)); } System.out.println(list); // [param1, param2, param3 param3 param3, param4]

Ответ 2



Попробуйте такой код: String line = "param1 param2 'param3 param3 param3' param4"; ArrayList list = new ArrayList(); Matcher m = Pattern.compile("([^\']\\S*|\'.+?\')\\s*").matcher(line); while (m.find()) list.add(m.group(1).replaceAll("'", "")); System.out.println(list); В итоге получится: [param1, param2, param3 param3 param3, param4] Смотрим группу без кавычек [^\']\\S* или группу с кавычками \'.+?\'.

Комментариев нет:

Отправить комментарий