[英]Grep and replace fuzzy pattern of string
我有一些带有python代码和装饰器的文件,如下所示:
@trace('api.module.function_name', info=None, custom_args=False)
这些装饰器之间的唯一区别是字符串'api.module.function_name'-函数名称和模块不同。 并且根据该参数名称,有时此装饰器是单行的,有时是两行或三行的。
我想用另一个装饰器替换这些装饰器-更简单,例如“ @my_new_decorator”。
我考虑过一些正则表达式,但我不知道这种“模糊”搜索是否可行。 我尝试了^@trace([A-Za-z0-9]\\, custom_args=False)$
但是它不起作用。
有办法吗?
使用带有多行标志的^@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')
看到这个正则表达式的演示
如您所见\\1
扩展到正则表达式(.+)
的第一组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.