Замените каждое вхождение строки на количество раз, которое это произошло до сих пор - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть строка с заполнителями, и я хочу прикрепить индекс к каждому заполнителю.

, например

'This @placeholder is @placeholder'

Должен стать

'This @param0 is @param1'

Предполагается, что у меня есть список параметров с 2 значениями (соответствует количеству времени появления @placeholder).

Одним из возможных решений будет.

result = ''
parts = my_text.split('@placeholder')
for i in range(0, len(params)):
  result += '{}@param{}'.format(parts[i], i)
return result

Другой вариант - продолжать заменять местозаполнитель текущим индексом, но это означает сканирование строки len (params) раз.

for i in range(0, len(params)):
  my_text = my_text.replace('@placeholder', '@param{}'.format(i), 1)

Есть ли лучшее решение для этого в Python?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Используя ответ @ Ajax1234, я могу просто заменить заполнитель на {} и использовать форматирование с массивом.

my_text = 'This param{} is param{}'
print(my_text.format(i for i in range(len(params))]))
0 голосов
/ 01 сентября 2018

Как насчет простого re.sub решения с обратным вызовом и счетчиком?

>>> import itertools
>>> c = itertools.count()
>>> text = 'This @placeholder is @placeholder'
>>> re.sub(r'\b@placeholder\b', lambda x: f'@param{next(c)}', text)
'This @param0 is @param1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...