在 Python 中 Lua 的全局模式替换函数string.gsub(s, pattern, function)
的最佳替代函数是什么? e.g。
> 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.sub
function实现。 }或lambda expr。
答案 0 :(得分:2)
当string.gsub(s, pattern, replace [, n])
返回一对值修改后的字符串和替换次数时,在Python中,您需要使用re.subn
:
<强>
re.subn(pattern, repl, string, count=0, flags=0)
强>
执行与sub()
相同的操作,但返回元组(new_string, number_of_subs_made
)。
查看Python demo:
import re
print (re.subn("(a)(n)", r"\2\1", "banana"))
# => ('bnanaa', 2)
您还可以使用匿名方法(或简单方案的lambda表达式)作为替换参数:
print (re.subn("(a)(n)", lambda m: "{}{}".format(m.group(2), m.group(1)), "banana"))
# => ('bnanaa', 2)
注意:如果您不需要替换次数,请仅使用re.sub
。