替换re.findall()结果中的一部分字符串

时间:2017-07-19 12:50:11

标签: regex python-2.7

在下面的输入字符串中,我想根据正则表达式搜索条件将“item”替换为“replacement_item”。

re.findall(r"(\bsee\b|\bunder\b|\bin\b|\bof\b|\bwith\b|\bthis\b)( *.{0,4})(item)","i have many roof item in the repeat item of the item inthe item downunder. with any item")

给出输出:

 [('of', ' the ', 'item'), ('with', ' any ', 'item')]

我想将上述匹配词组中的“item”关键字替换为“replacement_items”。

Expected output: i have many roof item in the repeat item of the replaced_item inthe item downunder. with any replaced_item

1 个答案:

答案 0 :(得分:1)

您可以使用\1\2replaced_item替换字符串获得预期输出:

import re
pat = r"\b(see|under|in|of|with|this)\b( *.{0,4})(item)"
s = "i have many roof item in the repeat item of the item inthe item downunder. with any item"
res = re.sub(pat, r"\1\2replaced_item", s)
print(res)

请参阅Python demo

另外,请注意单词边界现在如何限制交替中的单词的上下文(因为它们被移出,两端只需要1个单词边界)。

请注意:如果replaced_item是占位符,并且可以以数字开头,则应使用r'\1\g<2>replace_item'\g<2>是一种明确的反向引用符号,请参阅python re.sub group: number after \number SO post