여태까지 저는 프로젝트 내에서 특정 패턴들을 다른 패턴으로 바꿀 때, notepad++를 이용하였습니다. pycharm에서 쉽게 할 수 있는 방법이 없을까요? 사실, intellij에도 적용되는 방식이니, 잘 따라하시면 좋습니다. 특히, 프로젝트 내에 있는 모든 디버그용 주석을 풀어버린다던지, 주석을 한꺼번에 설정할 때 매우 편리하게 쓸 법 합니다. regex를 이용해서 전체 바꾸기를 이용하면 정말 편하기 때문입니다.

 


 먼저 디렉토리 안에는 1.txt와 main.py, a.py가 있어요.

 

 1.txt에는 print('gahui')가 있습니다.

 

  다음에, main.py에는 print('1.txt')가 있고, loop를 돌면서 i의 값을 출력하는 부분이 있습니다.

 

 a.py에는 2를 출력하는 것이 있습니다. 이 쯤 되면 제가 여기서 무엇을 하려는지 눈치를 채신 분도 계실 겁니다. 보통, 우리는 print를 디버그 용으로 많이 사용하곤 합니다. 그런데, 배포할 때에는 디버그용 print가 주석 처리 되어야 합니다. 이럴 때 어떻게 해야 할까요? 단, print문은 1줄에 모두 때려넣었다고 가정합시다.

 

 

 편집 - 찾기 - 파일에서 바꾸기를 눌러보겠습니다.

 

 그러면, 이런 창이 뜨는데요. 먼저, .* 아이콘을 누르겠습니다. 이것은 정규 표현식을 활성화 시키는 옵션입니다.

 

 도움말을 누르면 기본적인 문법에 대해서 나오는데요. 제가 쓸 예제에서 참고할 만한 것은 \s 정도가 있습니다. \s는 whitespace character를 의미합니다. 공백이라던지, 탭 문자와 같은 것들입니다.

 

 이제 ^(\s*print)를 패턴으로 입력해 봅시다. 그러면, white space가 0개 이상 나오고, print가 나오는 패턴과 일치하는 것을 찾습니다. 즉, print~가 나오거나, white space가 1개 이상 나오고 print~ 가 나오는 패턴을 찾는데요. 4개의 결과가 나왔습니다.

 


 그런데, txt에서는 찾고 싶지 않아요. py 파일에서만 찾고 싶어요. 그러면 파일 마스크를 체크 해 주고, *.py를 입력해 주시면 됩니다. 그러면 *.py 패턴을 가진 파일 내에서만 찾게 됩니다.

 

 

 이제 우리는 whitespace 0개 이상 나오고 print~가 나오는 꼴을, whitespace 0개 이상 나오고 #이 나오고 공백 하나 나오고 print~가 나오는 꼴로 바꾸려고 합니다. 그럴려면 capturing group을 2개 만듭니다. 먼저, print 바로 앞까지를 group 1, print 뒷단을 group 2로 둡시다.

 

 그러면 ^(\s*)(print.+)가 됩니다. 만약에, print('1.txt')가 있었다면, group 1에는 빈 문자열만 캡쳐되고, group 2에는 print('1.txt')가 캡쳐될 겁니다. 우리는 group1에 #과 공백을 붙인 다음에 group2를 덧붙이면 되므로, 바꿀 패턴에 $1# $2로 입력하시면 됩니다. pycharm regex에서 $1과 $2는, 1번째로 캡쳐된 것, 2번째로 캡쳐된 것을 의미합니다.

 

 a.py를 보면, # print('2')로 잘 되었음을 확인할 수 있어요.

 

 

 대신에, 1.txt에는 print('gahui')가 그대로 있는데요. 이는 *.py에 있는 패턴만 바꾸었기 때문입니다.

 

 

 반대로 디버그용으로 심어뒀던 코드의 주석을 풀려면 어떻게 해야 할까요? 이것도 어렵지 않습니다. 먼저, white space가 0개 이상 온 다음에, #과 공백이 옵니다. 다음에 print~가 이어지는 패턴입니다. white space가 0개 이상 먼저 오는 패턴을 group 1로 잡고, #과 공백 뒤에 print~가 이어지는 패턴을 group2로 잡습니다. 그러면 찾아야 할 패턴은 ^(\s*)# (print.+)가 됩니다. 주석은 중간에 있는 #과 공백만 없애면 되므로, 캡쳐된 그룹 1 뒤에 바로 그룹 2를 붙이면 됩니다. $1$2가 바꿀 패턴이 됩니다.

 

 이제, 모두 바꾸기를 누르시면 됩니다.