заменить подстроку в строке в соответствии со списком - PullRequest
2 голосов
/ 26 июня 2019

Согласно tutorialspoint:

Метод replace () возвращает копию строки, в которой вхождения старого были заменены на новые.https://www.tutorialspoint.com/python/string_replace.htm

Следовательно, можно использовать:

>>> text = 'fhihihi'
>>> text.replace('hi', 'o')
'fooo'

С этой идеей, учитывая список [1,2,3] и строку 'fhihihi', можно заменить одним из методов hi с 1, 2 или 3 в зависимости от его размещения?Например, это теоретическое решение даст:

'f123'

Любое решение должно быть бесконечно расширяемым.

Ответы [ 4 ]

2 голосов
/ 26 июня 2019

Вы можете создать строку формата из исходной строки:

>>> text = 'fhihihi'
>>> replacement = [1,2,3]
>>> text.replace('hi', '{}').format(*replacement)
'f123'
0 голосов
/ 26 июня 2019

Другие ответы дали хорошие решения. Если вы хотите заново изобрести колесо, вот один из способов.

text = "fhihihi"
target = "hi"

l = len(target)
i = 0
c = 0
new_string_list = []
while i < len(text):
    if text[i:i + l] == target:
        new_string_list.append(str(c))
        i += l
        c += 1
        continue
    new_string_list.append(text[i])
    i += 1

print("".join(new_string_list))

Использовал список для предотвращения последовательного создания строки.

0 голосов
/ 26 июня 2019

Одно решение с re.sub:

text = 'fhihihi'
lst = [1,2,3]

import re
print(re.sub(r'hi', lambda g, l=iter(lst): str(next(l)), text))

Печать:

f123
0 голосов
/ 26 июня 2019

Использование re.sub:

import re

counter = 0

def replacer(match):
    global counter
    counter += 1
    return str(counter)

re.sub(r'hi', replacer, text)

Это будет намного быстрее, чем любая альтернатива, использующая str.replace

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...