2015-01-01 2 views
0

Я работаю над небольшим Android-приложением, чтобы пронзить каждый раз, когда я останавливаюсь, или мне нужно снова запустить. Это очень просто: я только сделал валидатор ввода с использованием regex, и теперь я пытаюсь разобрать этот ввод.Разбор csv-подобный ввод (с небольшим причудой)

Вход как csv, но я хочу иметь повторяющиеся группы.

Например: 2.5,1,5(6,3),1,2.5 означает 2,5 минут прогрева, 1 мин ходьбы, а затем пять раз шесть минут бега и 3 минуты пешком ... (Вы получаете остальное я надеюсь)

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

Есть ли у вас идеи?

Спасибо,

Antarion

(кстати: это мое регулярное выражение https://regex101.com/r/kJ3rP8/1)

ответ

0

Ваш вопрос:

Как разбить строку через запятую, если это не внутри скобок ,

Регулярное выражение вам нужно:

,(?=[^\)]*(?:\(|$)) 

Что он делает:

, -> разбить строку запятой

(?= -> begginning из 'опережающего просмотра'. Это означает: раскол только если следующие символы следующим образом:

[^\)] -> НЕ закрывающих скобок

* -> неоднократных 0 или более раз

(?: -> не захватывая опережения

\( -> закрывающие скобы

| -> или

$ -> конец строки

+0

не будет работать с вложенными группами, но если это не является обязательным требованием, должно быть достаточно – Dima

+0

хорошо Не :) Спасибо verrry много! –

0

Regex не является действительно правильным инструментом для обработки синтаксического анализа, который требует состояние. Тебе лучше разбираться в этом. Что-то вроде этого, возможно:

Pattern p = Pattern.compile("(.+?)([,()])"); 
Matcher m = p.matcher(input); 
while(m.find) { 
    String number = m.group(1); 
    String delim = m.group(2); 
    if(delim.equals("(")) startRepeatingGroup(number); 
    else if(delim.equals(")") endRepeatingGroup(number); 
    else processNextNumber(number) 
} 
+0

Как работает этот код? Как бы вы закодировали другие функции? –

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