위키

노가다를 줄여주는 정규표현식 (1)

세에임 2011. 7. 22. 06:43

정규식의 최고의 장점은 엔터(Tab), 그리고 줄 끝줄의 맨처음 등의 자유로운 제어이다. 또한 매크로(macro)랑 같이 쓰면 거의 무적의 툴이 된다. 


필자는 무한 노가다를 많이 하는 편인데, 예를 들어 위키백과에 다음과 같은 도표를 만들 때이다. 


그런데 자료가 없어서 시청 통계자료방에 들어가서 다음과 같이 엑셀에 데이터를 정렬한다. 



이것을 에디터 플러스에 붙이면 다음과 같이 나온다. 직사각형의 셀(cell)은 탭(tab)으로 치환된다. 


위의 >>q 는 각각 엔터를 뜻하는 부호이다. 그냥은 보이지 않고, 다음과 같이 보기 메뉴에서 체크를 해줘야 보인다. 




위에서 탭과 공백 기호 / 줄 바꿈 기호 를 체크해주면 상기와 같이 보인다. 내가 하려는 작업은 맨 앞에 다음과 같이 삽입을 하려는 것이다. 

|'''[[부여읍 24517 9,695 58.86

|'''[[규암면 10794 4,310 46.58

|'''[[은산면 4507 1,901 69.45

|'''[[외산면 2823 1,305 56.02

|'''[[내산면 1863 848 40.45

|'''[[구룡면 2750 1,254 21.86

|'''[[홍산면 3493 1,528 23.9

|'''[[옥산면 1612 779 25.39

|'''[[남면 2202 1,057 20.99

|'''[[충화면 1364 661 37.1

|'''[[양화면 2101 1,057 32.77

|'''[[임천면 3440 1,664 43.15

|'''[[장암면 3345 1,467 47.69

|'''[[세도면 4027 1,828 41.92

|'''[[석성면 3621 1,510 30.58

|'''[[초촌면 2730 1,202 27.97

|'''[[부여군 75189 32,066 624.67


위키백과의 필자라면 이게 뭣하는 것인 지를 알 것이다. 프로세스는 다음과 같다. 


줄의 맨 처음을 찾아서, |'''[[ 를 삽입하라!!

그러면 바꾸기 창(Ctrl H)에서 확장을 선택하고, 왼쪽의 정규식을 체크한다. (축소(E))를 누르면 확장된 것이 없어진다.



줄의 맨처음을 나타내는 정규식 기호는 꺽쇠(^)이다. 그리고 바꿀 말에는 삽입될 말을 삽입한다. 


이번에는 뒤를 닫아 줘야 하겠다. 이것은 다음과 같은 명령을 내리면 된다. 


이라는 글자를 찾아서 ]]''' 로 바꿔라! (아래 그림에 '면'을 꼭 놓어줘라... 빼 먹었다.)


그럼 과 은 어떻게 해야지? 어쩔 수 없이 노가다를 해라!


다음 할 일은 탭(tab)으로 구분된 곳을 컬럼 구분 기호인 || 으로 바꿔주는 일이다. 다음과 같이 기호를 바꿔 준다. 


 \t 은 탭을 뜻하는 말로 숫자줄의 ← 옆에 있는 역슬래쉬 기호이다. 


이 탭을 아래의 || 로 치환(replace)하라는 것이다. 


그러면 아래와 같은 결과를 얻는다. 
















결과: 

|'''[[부여읍 || 24517 || 9,695 || 58.86

|'''[[규암면]]''' || 10794 || 4,310 || 46.58

|'''[[은산면]]''' || 4507 || 1,901 || 69.45

|'''[[외산면]]''' || 2823 || 1,305 || 56.02

|'''[[내산면]]''' || 1863 || 848 || 40.45

|'''[[구룡면]]''' || 2750 || 1,254 || 21.86

|'''[[홍산면]]''' || 3493 || 1,528 || 23.9

|'''[[옥산면]]''' || 1612 || 779 || 25.39

|'''[[남면]]''' || 2202 || 1,057 || 20.99

|'''[[충화면]]''' || 1364 || 661 || 37.1

|'''[[양화면]]''' || 2101 || 1,057 || 32.77

|'''[[임천면]]''' || 3440 || 1,664 || 43.15

|'''[[장암면]]''' || 3345 || 1,467 || 47.69

|'''[[세도면]]''' || 4027 || 1,828 || 41.92

|'''[[석성면]]''' || 3621 || 1,510 || 30.58

|'''[[초촌면]]''' || 2730 || 1,202 || 27.97

|'''[[부여군 || 75189 || 32,066 || 624.67


오홋~~ 그럼 나머지는 줄(row)넘김 구분 구호인 |- 만 복사해서 붙이기를 하면 된다. 그렇다고 진짜 CV 질을 하지는 말고, 이런 명령만 내리면 된다. 


엔터를 찾아서 그 뒤(새줄)|- 를 삽입하고 다시 엔터를 쳐라!



\n엔터를 나타내는 말이다. 이것도 W가 아니라 역슬래쉬 기호이다. 그러면 다음과 같은 원하는 최종 결과를 얻는다. 



나머지 작업은 부여읍과 부여군의 미진한 부분을 정리를 해주는 것이다. 딱 두 번의 CV 질로 끝난다. 이것을 복사해 소스를 정리해서 붙이면 깔끔한 다음과 같은 도표가 얻어진다. 



맨 마지막 부여군은 총계를 나타내는 것이기 때문에 맨 앞의 | ! 로 바꿔주어야 한다. 그러면 위와 같이 더 진하게 표시되면서 배경도 짙게 나타난다. 


오늘 배운 것은 줄의 맨처음과 끝을 나타내는 부호와 탭을 치환하는 것이다. 보통 바꾸에서는 텍스트 단위 밖에 되지 않는데 이것을 이용하면 무지막지한 프로세스를 줄일 수 있다. 


조금만 응용하면 무지막지하게 편리하게 사용할 수 있으며, 이것은 Editplus나 Ultraedit 등의 웬만한 에디터에서는 모두 지원이 되며, 정규식 자체가 C 언어에서 응용한 것이기 때문에 자바스크립트 뿐만 아니라 Asp, php, JAVA 등 모든 프로그램 언어에 적용이 된다. 


작업 결과 확인: http://ko.wikipedia.org/wiki/%EB%B6%80%EC%97%AC%EA%B5%B0#.ED.96.89.EC.A0.95_.EA.B5.AC.EC.97.AD



제2편 노가다를 줄여주는 정규표현식 (2)