简体   繁体   English

Python中Lua string.gsub的最佳替代功能是什么?

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

What's the best alternative function of Lua 's global pattern substitution function string.gsub(s, pattern, function) in Python ? PythonLua的全局模式替换函数string.gsub(s, pattern, function)的最佳替代函数是什么? eg 例如

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

UPDATE : I'd like to implement a complex function during pattern substitution in Python like Lua's string.gsub , which can be implemented by Python's re.sub with function or lambda expr . 更新 :我想在Python模式替换期间实现一个复杂的功能,例如Lua的string.gsub ,可以由Python的re.sub使用functionlambda expr来实现

As 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 : 由于string.gsub(s, pattern, replace [, n])返回一对值, 修改后的字符串和进行的替换数目 ,在Python中,您需要使用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 ). 执行与sub()相同的操作,但返回一个元组( new_string, number_of_subs_made )。

See a Python demo : 参见Python演示

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

And you also may use an anonymous method (or a lambda expression for simpler scenarios) as a replacement argument: 而且,您还可以使用匿名方法(对于更简单的方案,可以使用lambda表达式)作为替换参数:

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

See another Python demo . 参见另一个Python演示

NOTE : If you need no number of replacements made, use a mere re.sub . 注意 :如果不需要进行大量更换,请仅使用re.sub

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM