如何使用反向引用作为索引来替代列表?

时间:2019-07-01 13:24:40

标签: python regex-group

我有一个清单

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 个答案:

答案 0 :(得分:2)

使用正则表达式。

例如:

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.