2015-09-13 2 views
1

je besoin d'un regex pur (pas de langue) pour séparer les numéros de ce tableau d'entrée:regex pour séparer les numéros de la liste délimitée par des virgules

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

Questions:

  1. Le premier champ (L1) c'est réglé. Le tableau commencera toujours par L1.
  2. Les autres champs seront toujours des nombres 0 ou positifs.
  3. Mais je dois acquérir séparément chaque donnée, il serait donc:
    A regex pour les secondes données (numéro 3 dans l'exemple)
    A regex pour troisièmes données (numéro 5 dans l'exemple) ...
    .
    A regex pour croches données (numéro 900 dans l'exemple)

J'ai essayé regex [^;,]* mais ce ne fut pas en mesure d'obtenir chaque donnée séparément.

Quelqu'un peut-il m'aider sur ce problème?

+1

Pourriez-vous nous aider à comprendre pourquoi cela doit être regex pur? Ce n'est pas le meilleur outil pour cela. –

+0

Pour obtenir chaque champ, vous avez besoin d'un groupe de capture séparé – dawg

+1

ne serait pas 'L? (\ D +)' suffire, vous obtiendrez probablement un tableau de correspondances selon la langue que vous utilisez –

Répondre

0

Essayer d'affiner l'approche de Dawg de telle sorte que moins des groupes capturés sont utilisés:

Le quatrième champ peut correspondre à

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

Online Test

Le cinquième champ peut être mis en correspondance par

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

etc.

3

Avec 'regex pur' pour obtenir chaque champ, vous devez utiliser des groupes de capture séparés:

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

Demo

(Remarque: En Python, Perl, Ruby, Java, etc vous pouvez avoir une recherche globale et capturer comme /(\d+)/g mais qui est la collecte des langues les matches dans une liste ...)


Si vous voulez juste un champ spécifique, vous peut utiliser la répétition numérotée.

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

groupe Capture 3 serait toujours champ N-1 afin de capturer 213, le champ 15, dans votre exemple:

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

Demo2

+0

J'apprécie votre aide mais peut-être que je n'étais pas très clair. Mon problème est que j'ai besoin d'une expression regex disons seulement pour obtenir la quatrième colonne, par exemple. Dans votre expression, nous recevons toutes les colonnes en même temps. –

+1

voir edit vous pouvez faire '^ L (\ d) (, (\ d +)) {N}' – dawg

+0

Bien ive essayé mais il a capturé beaucoup de groupes en plus du nombre strict à la colonne. J'ai essayé^L \ d (, \ d +) {14} mais il obtient toujours la virgule ... n'importe quel moyen de jeter cette virgule? –