Ответ 1
Если вы хотите использовать функцию с re.sub
, вам нужно передать функцию, а не выражение. Как описано в здесь, ваша функция должна взять объект соответствия в качестве аргумента и возвращает заменяющую строку. Вы можете получить доступ к группам с помощью обычных методов .group(n)
и так далее. Пример:
re.sub("(a+)(b+)", lambda match: "{0} as and {1} bs ".format(
len(match.group(1)), len(match.group(2))
), "aaabbaabbbaaaabb")
# Output is '3 as and 2 bs 2 as and 3 bs 4 as and 2 bs '
Обратите внимание, что функция должна возвращать строки (поскольку они будут возвращены в исходную строку).