Lua string.gsub 在 Python 中的最佳替代函数是什么?

What's the best alternative function of Lua string.gsub in Python?

Lua的全局模式替换函数string.gsub(s, pattern, function)Python[=中最好的替代函数是什么25=]?例如

> string.gsub("banana", "(a)(n)", function(a,b) return b..a end) -- reverse any "an"s
bnanaa  2

UPDATE:我想在 Python 中的模式替换期间实现一个复杂的功能,就像 Lua 的 string.gsub,可以通过 Python 的 re.subfunction or lambda expr.

来实现

string.gsub(s, pattern, replace [, n]) returns a pair of values, the modified string and the number of substitutions made, in Python, you need to use re.subn:

re.subn(pattern, repl, string, count=0, flags=0)
Perform the same operation as sub(), but return a tuple (new_string, number_of_subs_made).

看到一个Python demo:

import re
print (re.subn("(a)(n)", r"", "banana"))
# => ('bnanaa', 2)

您也可以使用匿名方法(或更简单的情况下的 lambda 表达式)作为替换参数:

print (re.subn("(a)(n)", lambda m: "{}{}".format(m.group(2), m.group(1)), "banana"))
# => ('bnanaa', 2)

参见another Python demo

注意:如果不需要替换的次数,只需使用 re.sub.