【问题标题】:What's the best alternative function of Lua string.gsub in Python?Python 中 Lua string.gsub 的最佳替代功能是什么?
【发布时间】:2017-07-08 09:00:20
【问题描述】:

PythonLua的全局模式替换函数string.gsub(s, pattern, function)的最佳替代函数是什么?例如

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

更新:我想在 Python 中的模式替换期间实现一个复杂的函数,例如 Lua 的 string.gsub,可以通过 Python 的 re.subfunctionlambda expr 来实现。

【问题讨论】:

  • re.sub 是你想要的功能。
  • re.sub,也许吧? re.sub('(a)(n)', r'\2\1', 'banana')“最佳”是什么意思?
  • @jonrsharpe :我想在 Python 的模式替换期间实现一个复杂的函数,比如 Lua 的 string.gsub,也可以通过 Python 的 re.subfunctionlambda expr 来实现。

标签: python lua gsub


【解决方案1】:

由于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)

another Python demo

注意:如果您不需要更换次数,请仅使用 re.sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 2011-01-12
    • 2010-10-12
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多