У меня есть этот простой код замены регулярного выражения с блоком в нем. Когда Ruby делает gsub совпадение передается блоку, и все, что возвращается из блока, используется в качестве замены.
string = "/foo/bar.####.tif"
string.gsub(/#+/) { | match | "%0#{match.length}d" } # => "/foo/bar.%04d.tif"
Есть ли способ сделать это в Python, сохраняя его кратким? Есть ли альтернативный вариант ++ ++, который поддерживает lambdas или оператор with?
re.sub
принимает функцию в качестве замены. Он получает объект соответствия как единственный параметр и возвращает заменяющую строку.
Если вы хотите сохранить его oneliner, лямбда будет работать: re.sub(r'#+', lambda m: "%0"+str(len(m.group(0))), string)
. Я бы просто использовал небольшую трехстрочную def
, чтобы избежать всех этих парнеров в одном месте, но это только мое мнение.
Я не хорошо разбираюсь в Ruby, но вы можете искать re.sub
Надеюсь, что это поможет