我有一个简单的regexp替换代码,其中有一个块当ruby做gsub的时候
匹配被传递给块,从块返回的任何内容都被用作替换。

string = "/foo/bar.####.tif"
string.gsub(/#+/) { | match | "%0#{match.length}d" } # => "/foo/bar.%04d.tif"

有没有办法在Python中做到这一点,同时保持它的简洁性是否有支持lambdas或with语句的++replace++变量?

最佳答案

re.sub接受一个函数作为替换。它获取匹配对象作为唯一参数并返回替换字符串。
如果你想让它保持一行,一个lambda就可以工作:re.sub(r'#+', lambda m: "%0"+str(len(m.group(0))), string)。我只想用一个小的三行来避免所有的paren都在一个地方,但这只是我的观点。

10-07 19:21
查看更多