python буква замены строки по номеру вхождения - PullRequest
0 голосов
/ 16 марта 2020

Предположим, у меня есть строка Hello, world, и я хотел бы заменить все экземпляры o его номером вхождения, т.е. получить строчку: Hell1, w2rld?

Я нашел, как ссылка на пронумерованную группу, \g<1>, но для нее требуется номер группы.

Есть ли способ сделать то, что я хочу, в python?

Обновление: Извините, что не упомянул, что Я действительно искал решение регулярного выражения, а не просто строку. Я отметил решение, которое мне понравилось больше всего, но спасибо за все вклады, они были классными!

Ответы [ 4 ]

3 голосов
/ 16 марта 2020

Для решения с регулярным выражением :

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))
2 голосов
/ 16 марта 2020

Разбейте строку на букву «o» и соберите ее, добавив индекс детали перед каждой деталью (кроме первой):

string = "Hello World"

result = "".join(f"{i or ''}"+part for i,part in enumerate(string.split("o")))

output:

print(result)

# Hell1 W2rld
1 голос
/ 16 марта 2020

Использование itertools.count

Пример:

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
0 голосов
/ 16 марта 2020

Для этого вам не нужно регулярное выражение, достаточно простого l oop:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...