2015-09-13 2 views
1

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

L1,3,5,0,5,80,40,31,0,0,0,0,512,412,213,900 

вопросы:

  1. Первое поле (L1) фиксированный. Массив всегда будет начинаться с L1.
  2. Другие поля всегда будут 0 или положительные числа.
  3. Но мне нужно приобрести каждые данные по отдельности, так что было бы:
    регулярного выражения для вторых данных (номер 3 в примере)
    регулярного выражения для третьих данных (номер 5 в примере)
    ... .
    регулярное выражение для шестнадцатого данных (число 900 в примере)

Я попытался это регулярное выражение [^;,]*, но это было не в состоянии получить каждый данные отдельно.

Может ли кто-нибудь помочь мне по этому вопросу?

+1

Не могли бы вы помочь нам понять, почему это должно быть чисто регулярное выражение? Это не лучший инструмент для этого. –

+0

Чтобы получить каждое поле, вам нужна отдельная группа захвата – dawg

+1

не будет 'L? (\ D +)' достаточно, вы, вероятно, получите массив совпадений в зависимости от языка, который вы используете –

ответ

0

Пытаюсь уточнить подход DAWG, таких, что менее захватывая группы используются:

Четвертое поле может быть сопоставлено

^L1(?:,(\d+)){3} 

Online Test

Пятое поле может соответствовать

^L1(?:,(\d+)){4} 

т.д.

3

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

^L(\d),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)$ 

Demo

(Примечание: В Python, Perl, Ruby, Java и т.д. Вы можете иметь глобальная находка и захватить как /(\d+)/g но это собирание языка до спички в список ...)


Если вы хотите только одно конкретного поля, вам может использовать пронумерованное повторение.

^L(\d)(,(\d+)){N} 

Захват группы 3 всегда будет поле N-1 так, чтобы захватить 213, 15-е поле, в вашем примере:

^L(\d)(,(\d+)){14} 

Demo2

+0

Я одобряю вашу помощь, но, возможно, я был не очень ясен. Моя проблема в том, что мне нужно выражение регулярного выражения, скажем, только для получения четвертого столбца, например. В вашем выражении мы получаем все столбцы одновременно. –

+1

см. Править Вы можете сделать '^ L (\ d) (, (\ d +)) {N}' – dawg

+0

Ну, я попробовал, но он захватил много групп, кроме строгого номера в столбце. Я пробовал^L \ d (, \ d +) {14}, но он все еще получает запятую .. любой способ выбросить эту запятую? –