2017-07-08 48 views
0

Lua的全球模式替代功能string.gsub(s, pattern, function)Python的最佳替代功能是什麼?例如Python中Lua string.gsub的最佳替代函數是什麼?

> 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實施過程中複雜的功能。

+0

're.sub'是你想要的功能。 –

+0

're.sub',也許? 're.sub('(a)(n)',r'\ 2 \ 1','banana')'你是什麼意思*「最好」*? – jonrsharpe

+0

@jonrsharpe:我想在Python的模式替換期間實現一個複雜的函數,比如Lua的'string.gsub',它也可以通過Python的're.sub'與[function](https://stackoverflow.com/a/17136150/7630831)或[lambda expr](https://stackoverflow.com/a/18737927/7630831)。 – abuccts

回答

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) 

another Python demo

備註:如果您不需要進行更換次數,請僅使用re.sub

相關問題