我有一个简单的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都在一个地方,但这只是我的观点。