2009-06-24 12 views
0

J'ai un fichier CSV horriblement formaté, délimité par des tabulations, que j'essaie de nettoyer.Créer un fichier CSV valide avec des expressions régulières

Je voudrais citer tous les champs; actuellement seulement certains d'entre eux sont. J'essaie de passer, onglet par onglet, et d'ajouter des citations si nécessaire.

Ce RegEx me donnera tous les onglets.

\t 

Ce RegEx me donnera les onglets qui ne se termine pas avec un ".

\t(?!") 

Comment puis-je obtenir les onglets qui ne commencent pas par un "?

+0

Vous voulez dire probablement « CSV », pas « CVS ». – ephemient

+0

Les expressions régulières ne sont pas implémentées de manière identique dans toutes les langues. S'il vous plaît spécifier ce que vous utilisez? – Oorang

+0

combien de temps jusqu'à ce que quelqu'un dise "et maintenant vous avez deux problèmes ..."? –

Répondre

2

Utilisez lookbehind négatif: (?<!")\t

3

En général, pour ce genre de problèmes, si c'est un événement d'une fois, je vais utiliser les capacités Excelle ou d'autres applications (SSIS T-SQL?) Pour produire la sortie désirée.

Une regex à usage général se heurtera généralement à des exceptions bizarres et l'obtenir juste prendra souvent plus de temps et est susceptible de manquer des groupes que votre regex n'a pas saisi.

Si cela se produit régulièrement, essayez de résoudre le problème à la source et/ou créez un utilitaire spécial pour le faire.

+0

Je suis d'accord que la solution idéale Ce serait une solution à la source du fichier CSV, malheureusement je ne peux pas le contrôler.Ce processus sera automatisé parce que l'utilisateur téléchargera ces fichiers désagréables et s'attendra à ce qu'ils soient importés comme par magie – Chap

+0

Rappelez-vous que l'expression régulière peut sembler la meilleure solution jusqu'à ce que vos utilisateurs commencent à être "créatifs" Vous courez le risque que votre regex tourne correctement sans erreurs, mais toujours avec une sortie brouillée – hova

1

Pour une photo comme celle-ci, j'ai l'habitude d'écrire un petit programme pour nettoyer les données, de cette façon, je peux aussi ajouter une validation pour m'assurer qu'elle a vraiment été convertie correctement. Je n'ai rien contre regex mais souvent dans mon cas, il me faut plus de temps pour comprendre l'expression regex que d'écrire un petit programme. :)

modifier: venez y penser, le principal facteur de motivation est qu'il est plus amusant - pour moi au moins :)

+0

moi aussi, j'utilise habituellement l'occasion de donner un essai à une nouvelle langue I étudie, comme python, scala, node, etc ... – opensas

Questions connexes