permet de dire que j'ai les chaînes suivantes: avis que j'ai deux types de chaînes: le type 181-457216 et le type 1972-10-28 (date)
Je modifie un CSV, et pour une raison quelconque (le regarda fort, n'a pas trouvé de raison), il n'entraîne-t-il parfois pas de hasard une virgule entre les nombres dans ces types de chaînes. P> Ce que je veux accomplir, c'est simplement détecter ces virgules par l'expression régulière et les remplacer par vide (retirez les virgules). P> Dites pour le premier type de chaîne, c'est-à-dire: '187-14,412' J'ai Éssayé: p> Dans cet exemple, la virgule est le groupe 1, mais comment puis-je spécifier au sous-groupe (1) dans cette regex? P> J'ai également essayé de regarder et de regarder la lunette, mais j'ai des problèmes avec le lookbehind: p> J'étais errant s'il y avait une meilleure façon de réégifier ces chaînes ou de pouvoir Pour spécifier le groupe (1) sur le repère p> p>
4 Réponses :
Vous n'avez pas besoin de regex pour cela, vous pouvez simplement diviser une chaîne à ','. Et si cela donne un tableau avec une longueur de plus de 1, hachez le dernier index de la chaîne gauche (à l'index 0) et d'abord de droite (à l'index 1). OH Peut être vous en avez besoin, idk.
re.sub(r'\d,', '', stringX)
import re [re.sub(r'\,', '', x) for x in stringX] ['187-4948114', '181-457216', '19661-04-22', '1972-10-28', '19940-04-16', '2017-088-29', '2014-04-18']
Vous pouvez utiliser une simple liste Pythonic si vous souhaitez utiliser str.replace () code>. p> regex code>, cela pourrait être une alternative. P > single dash:
['187-4948114', '181-457216', '19661-04', '1972-10', '19940-04', '2017-088', '2014-04']
double dash:
['19661-04-22', '1972-10-28', '19940-04-16', '2017-088-29', '2014-04-18']
@Sahiramena Peut-être que vous avez également besoin d'extraire des valeurs simples et à double pointillé, si oui, jetez un coup d'œil à la dernière partie de cette solution.
Vous pouvez utiliser votre approche de regex à l'aide d'un Expression Lambda dans Re2
Modifier p> à: p>
Toutes les réponses étaient géniales, mais cela l'a fait et a appris une belle fonctionnalité de re2. J'ai fini par faire RE2 (R '\ D + \ - \ D + (\,) \ d +', lambda m: re7 (r '\,', '', m.group (0)), stringx) et a fait un double re.sub
Mon conseil est de regarder plus fort pourquoi votre code modifiant les fichiers CSV génère des erreurs (peut-être poster une question ici). Essayer de travailler autour des bugs (en particulier lorsqu'ils sont dans votre propre code) est le jeu d'une tasse. Pour supprimer les virgules, cependant, pourquoi ne pas les convertir en cordes vides. Faire cela, vous ne devriez même pas avoir besoin d'une expression régulière.
Il semble que le code qui modifie votre fichier CSV en plus que les virgules insère également un chiffre supplémentaire dans les entrées de données. 187-49481.14 devrait être 187-494814, 196 61-04-22 -> 1961-04-22 et ainsi de suite.