Как использовать обратные ссылки в качестве индекса для замены через список? - PullRequest
1 голос
/ 01 июля 2019

У меня есть список

fruits = ['apple', 'banana', 'cherry']

Мне нравится заменять все эти элементы по их индексу в списке. Я знаю, что могу пройти по списку и использовать замену строки вроде

text = "I like to eat apple, but banana are fine too."
for i, fruit in enumerate(fruits):
    text = text.replace(fruit, str(i))

Как насчет использования регулярных выражений? С \number мы можем вернуться к матчу. Но

import re

text = "I like to eat apple, but banana are fine too."
text = re.sub('apple|banana|cherry', fruits.index('\1'), text)

не работает. Я получаю ошибку, что \x01 не в плодах. Но \1 должно относиться к 'apple'.

Меня интересует наиболее эффективный способ замены, но мне также нравится лучше понимать регулярные выражения. Как я могу получить строку соответствия из обратной ссылки в регулярном выражении.

Большое спасибо.

1 Ответ

2 голосов
/ 01 июля 2019

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

Ex:

import re

text = "I like to eat apple, but banana are fine too."
fruits = ['apple', 'banana', 'cherry']

pattern = re.compile("|".join(fruits))
text = pattern.sub(lambda x: str(fruits.index(x.group())), text)
print(text)

Выход:

I like to eat 0, but 1 are fine too.
...