2016-07-29 3 views
0

의 퍼지 패턴을 바꿉니다그렙 내가 같이 몇 가지 파이썬 코드 파일과 장식이 문자열

@trace('api.module.function_name', info=None, custom_args=False) 

이 장식 사이의 유일한 차이점은 문자열 'api.module.function_name'입니다 - FUNC 이름과 모듈이 다릅니다. 그리고이 param 이름에 따라 때로는이 데코레이터가 일직선 상에 있고, 때로는 두 줄 또는 세 줄로되어 있습니다.

"@my_new_decorator"와 같이이 데코레이터를 다른 것으로 교체하고 싶습니다.

나는 어떤 정규식에 대해 생각했지만 그러한 "퍼지"검색이 가능한지 전혀 알지 못합니다. 시도했는데 ^@trace([A-Za-z0-9]\, custom_args=False)$ 하지만 작동하지 않습니다.

할 방법이 있습니까? 이 같은

+0

정규식의 첫 번째 그룹에 확장 볼 수 있듯이

>>> 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를 참조하십시오 이런 식으로 작동하지 않는다면 영숫자가 하나만 일치하고 이것이 모두 0 열이면 모두 일치하기 때문에'^ \ s * @ trace \ (. + \) $ '와 같은 것이 필요할 것입니다. – moopet

+0

수도 있습니다. 당신의 regex에 multiline 플래그가 필요합니다 :'re.M' – pwnsauce

답변

1

뭔가 작업을해야합니다 :

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

가 여러 플래그와 함께 demo

1

사용 ^@trace\('api\.(.+)\.(.+)', info=None, custom_args=False\)$를 참조하십시오.

당신은 re.sub을 사용할 수 있습니다 : 당신이 \1이 잘 정규식 (.+)

+0

고마워요, 이것 역시 작동합니다, 그래서 upwoting. :) – Paul

관련 문제