2017-08-16 4 views
0

Compte tenu de l'entrée suivanteComment transformer ces lignes de texte en lignes CSV avec regex (PCRE)?

1 foo 745 
2 baz 746 
unneeded characters 

Je me attends à une sortie comme suit

1;foo;745 
2;baz;746 

J'ai utilisé un regex pour obtenir la sortie désirée. Cependant, je ne peux pas me débarrasser des caractères de poubelle.

Regex: /(\d)\s([a-z]+)\s(\d+)\s+|[\S\s]+$/x

Demo

+0

Essayez https://regex101.com/r/hOqGwm/1 –

+1

S'il vous plaît expliquer les exigences, en particulier pour les « déchets » partie. –

+0

@ WiktorStribiżew La partie "garbage" fait référence aux caractères que je ne veux pas faire correspondre. – Stephan

Répondre

0

Vous pouvez utiliser regex pour:

^(\d+)\h+([a-z]+)\h+(\d+)(?:\R\S*$)* 

Updated RegEx Demo

RegEx Breakup:

  • ^: Lancer
  • (\d+): match 1+ chiffres dans le groupe capturé # 1
  • \h+: match 1+ horizontal
  • espaces blancs
  • ([a-z]+): match 1+ lettres minuscules dans le groupe capturé # 2
  • \h+: Correspondance 1+ espaces blancs horizontaux
  • (\d+): Correspondance de 1+ chiffres dans le groupe capturé # 3
  • (?:\R\S*$)* : Match nul ou plus ordures caractères qui signifie des caractères non-blancs dans une ligne distincte
+0

Si la poubelle contient un chiffre, le ['(\ d +) \ h + ([az] +) \ h + (\ d +) \ D +'] (https://regex101.com/r/W0zsHz/4) a gagné ' t travail. –

+0

ok J'ai mis à jour ma réponse pour prendre soin de ça. Bien que le caractère de poubelle est un terme vague. Cela peut avoir un sens différent pour différentes personnes. – anubhava

+1

Votre réponse a fourni la sortie attendue. Je vous remercie :) – Stephan