В любом случае, просто попробуйте:
return p.sub(lambda match: translateWord(match.group(1)), sentence)
Похоже, вы запутались в том, что передавать в качестве второго параметра в re.sub: вы передаете реальную функцию (в данном случае лямбда-выражение) Нет необходимости пытаться встроить это в строку.
Однако, если вы хотите изменить только группу, методы re
не дают ей прямой поддержки - вместо этого вам нужно воссоздать одну строку со всем соответствием, заменив нужные группы. изменить себя.
Самый простой способ - расширить вашу функцию «лямбда» в другую многострочную функцию, которая сделает это за вас. Затем он может использовать атрибут .regs
в полученном объекте сопоставления, чтобы узнать пределы групп (начало и конец), и построить заменяющую строку:
def replace_group(match):
sentence = translateWord(match.group(1))
matched = match.group(0)
new_sentence = matched[:match.regs[1][0]] + sentence + matched[match.regs[1][1]:]
return new_sentence