0
votes

Substitution de regex entre deux expressions

permet de dire que j'ai les chaînes suivantes: xxx

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.

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).

Dites pour le premier type de chaîne, c'est-à-dire: '187-14,412' J'ai Éssayé: xxx

Dans cet exemple, la virgule est le groupe 1, mais comment puis-je spécifier au sous-groupe (1) dans cette regex?

J'ai également essayé de regarder et de regarder la lunette, mais j'ai des problèmes avec le lookbehind: xxx

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


2 commentaires

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.


4 Réponses :


1
votes

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)


0 commentaires

1
votes
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']

0 commentaires

2
votes

Solution

Vous pouvez utiliser une simple liste Pythonic compréhension forte> avec str.replace () code>. p> xxx pré> sortie forte>: p> xxx pré>

si vous souhaitez utiliser 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']


1 commentaires

@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.



1
votes

Vous pouvez utiliser votre approche de regex à l'aide d'un Expression Lambda dans Re2

Modifier xxx

à: xxx


1 commentaires

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