2011-01-06 6 views
0

특정 문자열을 검색하고 바꿀 수있는 방법이 있습니까? 그렇지만 비슷한 문자열을주의해서 바꾸지는 않습니까? 예를 들어파이썬에서 특정 검색?

, 내가

self.a 
self.b 
self.c 
self.d 
self.e 
self.f 
self.g 

을 가지고 내가

self.a 
self.__b 
self.c 
self.__d 
self.__e 
self.f 
self.g 

를 원하고 내가 다른 사람을 그들에게 비공개하는 일부 변수에 __을 추가 할 수 있지만하지 않을 경우 어떻게 것 그것을 개별적으로 바꾸는 것, 또는 그것들 모두를 바꾸는 것, 그리고 내가 원하지 않는 것들을 원상태로 돌리는 것이 부족한가? 내 프로그램에는 많은 수의 변수가 있으며 각 변수를 매우 자주 사용하므로 코드 자체를 직접보고 싶지 않습니다.

+3

파이썬 문제 이외의 편집 문제가 아닌가요? 예를 들어 편집기를 사용하여 모든 "self.b"를 "self .__ b"로 바꾸거나 sed를 유사한 방식으로 사용할 수 있습니다. – Christian

답변

1

스크립트를 백업하십시오. 새 스크립트를 만들고 import re을 만든 다음 원본 스크립트를 re.sub()하십시오. 기능을 보장하기 위해 regex'd 스크립트에서 단위 테스트를 실행하십시오.

3

Regular expressions?

Python's re module에는 re.sub이라는 기능이있어 패턴과 일치하는 모든 것을 다른 것으로 바꿉니다.

기본 설정에 따라 Perl, awk, sed 등의 정규 표현식을 사용할 수도 있습니다. 일치시키고 변경하고자하는 패턴을 기반으로 검색 및 바꾸기 만하면됩니다.

+1

+1 for sed. 파이썬 스크립트를 작성하는 것보다는 한 줄짜리 라이너가 작동하고 쉬울 것입니다. – Hollister

1

정규식은 여기에 친구입니다. 그들은 초보자들에게 조금 집중적입니다. 위의 예제에서 목표를 달성하려면 python 명령을 사용하십시오.

import re 
pattern = r'(self\.)(b|d|e)\s' 
result = re.sub(pattern, '\1__\2', source) 

'self'로 시작하는 문자열의 모든 인스턴스를 사용합니다. 그 다음에 b, d 또는 e가오고 'self .__'다음에 올바른 문자열로 바뀝니다.

1

대체 스크립트를 작성하는 것 외에도 편집기에서이를 수행 할 수 있습니다. 예를 들어 빔 입력을 사용한다면 다음과 같이하면됩니다.

:%s/self\.\(b\|d\|e\)/self.__\1/g 
+0

Vim을 사용하지 않고 유닉스/리눅스 명령 행을 사용한다면'sed '/ self \. \ (b \ | d \ | e \)/self .__ \ 1/g'your_python_module.py ' –

관련 문제