반응형

 정규표현식을 쓰는 이유 중 하나는, 패턴을 찾기 위해서입니다. 그런데, group capture를 해서 가공할 수도 있는데요. 예제를 통해서 알아보도록 하겠습니다.

 


 정규 표현식에 체크한 상태에서, notepad++에서 찾을 내용은 ([0-9]{2,})-([0-9]{3,})-([0-9]{3,})로 입력하였습니다.

 

 

 입력은 위와 같습니다. 국번이 있는 걸로 보아서는 그냥 전화 번호인 모양입니다. 모두 바꾸기를 눌러 보겠습니다.

 

 

 그러면 국번만 쏙 뽑혀서 나옴을 볼 수 있어요. 02는 서울, 031은 경기도, 032는 인천이네요. 어떤 원리로 이렇게 뽑혔는가? 천천히 보도록 하겠습니다.

 

 먼저 소괄호로 감싸져 있는 부분이 보이실 텐데요. 이는 캡쳐한다는 것을 의미합니다. 그러면, 캡쳐되는 부분은 위 그림과 같이 될 겁니다. [0-9]{2,} 패턴을 capture 하고, 다음에 -가 오고, 그 다음에 [0-9]{3,} 패턴이 오는데 이것을 또 capture 합니다. 다음에 -가 온 다음에, [0-9]{3,} 패턴을 캡쳐한다는 이야기입니다.

 

 뭔가 어려운 거 같지만 별 거 아닙니다. 그룹화 하겠다는 것입니다.

 

 먼저 숫자 2회이상 대시 숫자 3회 이상 대시 숫자 3회 이상 패턴이 있으니, 찾으려는 패턴은 맞아요. 첫 번째 그룹은 숫자 2개가 나오는 02 패턴입니다. 다음에 대시가 나왔으므로, 1번째 그룹화가 된 대상입니다. 즉, 1번째로 캡쳐가 된 것입니다.

 

 다음에 대시가 나오고 111이 나왔습니다. 이는 숫자가 3번 이상 등장한 패턴이므로 2번째로 뽑아지게 됩니다.

 

 그리고 다음에 111은 숫자가 3번 이상 등장한 패턴입니다. 3번째로 뽑아지는 패턴입니다. 바꿀 내용에서 \1로 적었는데요. 이는 1번째로 그룹화된 패턴으로 바꾸겠다는 의미입니다. 예를 들어 02-111-1111이면 02로 바꾸겠다는 의미이고, 032-111-1111이였다면 032로 바꾸겠다는 의미입니다.

 

 최종적으로 국번만 남게 됩니다.

 


 이번에는 조금 더 쉽습니다. 보잉사가 만든 비행기 기종은 여기에서 보실 수 있어요. 저는 이 사이트에서 비행기 기종 정보들을 긁어서 메모장에 저장하였습니다.

 

 

 이 중에서, 3번째 필드에 있는 것만 뽑아서 가져오려고 합니다. 예를 들자면 Boeing 747-200과 같은 것을요. 어떻게 하면 될까요? 탭으로 구분이 되므로, 정규 표현식은 아래와 같이 작성하시면 됩니다.

 

 

 탭이 들어가있지 않은 하나 이상 나오는 패턴을 그룹으로 묶어주고, 탭, 다시 탭이 들어가있지 않은 하나 이상 나오는 패턴을 그룹으로 묶고 탭, 다음에 아무 문자나 하나 이상 나오는 패턴. 이렇게 묶고 \3\n을 바꿀 내용으로 입력해 봅시다.

 

 그러면 3번째로 그룹화가 된 것이 뽑히게 됩니다. 이거도 어렵지 않아요. 이제 ps에서 어떻게 쓰면 좋을까요? 제가 낸 문제를 봅시다.

 

 표 1을 그대로 복사 붙여넣기 하면 아래와 같이 저장되어 있습니다. 이게 6줄이라 망정이지 20줄, 30줄이였으면 힘들었을 겁니다. 보통 이럴 때에는 프로그램으로 가공을 할 수 있게 바꾸게 되는데요. 저는 이런 데이터는 문자열로 많이 바꿔치기 하는 편입니다.

 

 요렇게 입력하시면 그룹화가 되는 것은 그냥 줄 전체입니다. 왜냐하면, .는 어떤 문자나 가능하기 때문입니다. 바꿀 내용은 \"\1\", 이렇게 입력하였는데요. 이는 앞과 뒤에 각각 "와 ",을 넣기 위해서입니다.

 

 

 t.in이 이렇게 바뀌었습니다. 이제 간단한 가공 처리만 하면 됩니다.

 

 

반응형

댓글을 달아 주세요