繁体   English   中英

Grep和替换字符串的模糊模式

[英]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)$但是它不起作用。

有办法吗?

这样的事情应该起作用:

(\n|^)\s*@trace\(\s*'[^']*',\s*info=None,\s*custom_args=False\s*\)\s*(\r|\n|$)

观看演示

使用带有多行标志的^@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM