Supposons que j'ai une chaîne J'ai trouvé comment faire référence à un groupe numéroté, Il y a un moyen de faire ce que je veux dans Python? P>
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! P> bonjour, monde code>, et j'aimerais remplacer toutes les instances de O code> par son numéro d'occurrence, c'est-à-dire obtenir une piqûre: Hell1, W2RLD code>? P>
\ g <1> code>, mais il nécessite un numéro de groupe. P>
4 Réponses :
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
Utilisation de iTERTOOLS.COUNT CODE> 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
Merci, c'est très pythonique!
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))
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
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): sortie: p > print(result)
# Hell1 W2rld