Je dois trouver des occurrences dans lesquelles une virgule est séparée par un numéro de chaque côté.
Par exemple: P>
CleanString =re.sub(r([0-9]+)\s?,\s?([0-9]+)' ,r"\g<1>,\g<2>",SampleString)
3 Réponses :
Vous pouvez utiliser le regex suivant: sortie: p>
Et s'il y a des deux chiffres? Comme 'A, B, C, 1, 3,4, 44, G'?
@Ritika Cela fonctionne aussi pour ceux-ci aussi, la vérification d'un chiffre est juste un chèque, il pourrait y avoir plus, mais il ne peut y avoir moins.
Merci!. Désolé mais j'ai une autre question à ce sujet. Et si j'ai une chaîne qui est 'A, B, C, M1, 3,4, 44, G'. J'aurais besoin de la sortie comme: 'A, B, B, M1, 3,44, G'. Dans ce cas, le M1 me donne un problème
@Ritika Dans ce cas, vous pouvez utiliser le regex (\ b \ d +) (\ s *, \ s *) (\ d + \ b) code> (cochez la modification).
@Mrgreek. Il remonte ensuite à mon problème d'origine. Cela ne capte que par groupes de deux. Donc, s'il y a un nombre impair d'entiers, par exemple. 'A, B, B, M1, 3,44,5, G', il ne capture pas la virgule entre 44 et 5. Je pourrais poser cela comme une nouvelle question si nécessaire.
@Ritika Dans ce cas, la regex ne devrait pas consommer le bon numéro (cochez la modification).
CleanString = re.sub(r"(?<=\d)\s*,\s*(?=\d)", ",", SampleString) (?<=\d) is a lookbehind that requires one digit (\d) to precede the current position(?=\d) is a lookahead that requires one digit to follow the current positionYou don't need to capture anything, i.e., you don't any extra parentheses. Anyway it may be good to know that lookaheads and lookbehinds are non-capturing (unless they contain parentheses inside).
Cette regex utilise Lookahead:
Ceci correspond éventuellement suivi de Les espaces suivis d'une virgule suivie éventuellement des espaces uniquement si cette séquence est suivie d'un chiffre. Donc, dans la chaîne impressions: < / p> ((\ d +) \ s *, \ s *) (? = \ d) code> p> 1, 2, 3 code>, la première correspondance est 1, code>. P>
Accordé que j'aurais pu utiliser LookbeHind et juste remplacé par un , code> plutôt qu'un groupe de capture pour le nombre ..
Essayez
re.sub (r '([0-9] +) \ s *, \ s * (? = [0-9])', R '\ 1,', Samplestring) code>. Voir Regex101.com/r/gi5t95/1