我有一些带有python代码和装饰器的文件:
@trace('api.module.function_name', info=None, custom_args=False)
这些装饰器之间的唯一区别是字符串'api.module.function_name' - func名称和模块不同。根据这个参数名称,有时这个装饰器是单行的,有时是两行或三行。
我想用另一个更换这些装饰器 - 更简单,比如“@my_new_decorator”。
我想到了一些正则表达式,但我不知道这种“模糊”搜索是否可行。我试过^@trace([A-Za-z0-9]\, custom_args=False)$
但它不起作用。
有办法吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
将^@trace\('api\.(.+)\.(.+)', info=None, custom_args=False\)$
与多行标记一起使用。
您可能想要使用re.sub:
>>> import re
>>> pattern = re.compile('^@trace\('api\.(.+)\.(.+)', info=None, custom_args=False\)$', re.M)
>>> re.sub(pattern, '@my_new_decorator('\1', '\2')', '@trace('api.module.function_name', info=None, custom_args=False)')
@my_new_decorator('module', 'function_name')
有关正则表达式
的演示,请参阅this正如您所见\1
展开到正则表达式中的第一个组(.+)