0
votes

String Python String Lettre de substitution par son numéro d'occurrence

Supposons que j'ai une chaîne bonjour, monde , et j'aimerais remplacer toutes les instances de O par son numéro d'occurrence, c'est-à-dire obtenir une piqûre: Hell1, W2RLD ?

J'ai trouvé comment faire référence à un groupe numéroté, \ g <1> , mais il nécessite un numéro de groupe.

Il y a un moyen de faire ce que je veux dans Python?

Mise à jour: Désolé de ne pas mentionner que je cherchais vraiment une solution réégyvalière, pas seulement une chaîne. J'ai marqué la solution que j'ai aimé le meilleur, mais merci pour toutes les contributions, elles étaient cool!


0 commentaires

4 Réponses :


0
votes

Vous n'avez pas besoin de regex pour cela, une boucle simple suffira:

sample = "Hello, world"

pattern = 'o'
output = ''
count = 1
for char in sample:
    if char == pattern:
        output += str(count)
        count += 1
    else:
        output += char

print(output)
>>> Hell1, w2rld


0 commentaires

1
votes

Utilisation de iTERTOOLS.COUNT CODE>

EX: STRY> P>

import re
from itertools import count 

c = count(1)
s = "Hello, world"

print(re.sub(r"o", lambda x: "{}".format(next(c)), s))
#or
print(re.sub(r"o", lambda x: f"{next(c)}", s))
# --> Hell1, w2rld


1 commentaires

Merci, c'est très pythonique!



3
votes

pour un Solution d'expression régulière :

import re

class Replacer:
    def __init__(self):
        self.counter = 0

    def __call__(self, mo):
        self.counter += 1
        return str(self.counter)

s = 'Hello, World!'
print(re.sub('o', Replacer(), s))


1 commentaires

Merci, c'est cool, je ne savais pas que je pourrais passer une classe de remplacement personnalisée. J'ai choisi l'autre solution, mais j'ai utilisé le vote pour le vôtre



2
votes

diviser la chaîne sur la lettre "O" et réassemblez-la en ajoutant l'index de la pièce devant chaque partie (à l'exception du premier): xxx pré>

sortie: p >

print(result)

# Hell1 W2rld


0 commentaires