Это вопрос, который у меня есть с точки зрения регулярного выражения vim, но регулярное выражение python также будет полезным и желанным.Давайте возьмем в качестве примера эту функцию python:
def func_hello (*args):
for arg in args:
print 'Hello, %s!' % arg
Я хочу превратить это в метод в классе (не совсем - только в этом примере), с методом method_hello (на самом деле я не называювсе так).Я могу сделать что-то вроде этого:
:%s/def func_\(\w*\) (\(.*\)):\(\(\n\s\+.*\)\+\)/class \u\1 (object):\r\tmethod_\1 (self, \2):\r\t\3/g
Однако, это дает мне это:
class Hello (object):
method_hello (self, arg1, arg2, arg3):
for arg in arg1, arg2, arg3:
print 'Hello, %s!' % arg
Я пытался сделать что-то вроде этой работы, чтобы собрать несколько строк (что он делает)
\(\(\n\s\+.*\)\+\)
... и затем сделайте отступ для всех них этим (чего не происходит)
\r\t\3
... потому что я не знаю, как добавить каждую строку всовпадение с вкладками.Кажется, мне нужно регулярное выражение внутри моего регулярного выражения, чтобы сопоставить переменное число строк и добавить каждую из них к табуляциям.
Есть ли способ сделать это?