패턴 인식 5에서는 한글이 포함된 줄을 골라내는 패턴을 살펴봤다.
이번엔 실전 문제 하나 해보자.
'동사를 알면 죽은 영어도 살린다' 개정판을 쓸때 써먹었던 패턴이다. 정확이 이 패턴은 아니지만 아이디어는 똑같다.
예를 들어, 영어책은 대부분 이런식이다. 지난회 다뤘던 통합자막을 가지고 짱구굴려보자.
Are you Trinity?
니가 튜니티냐?
Who's asking?
넌 누군데?
Just answer my question, shithead!
묻는 말에 대답이나해 짜샤!
Trinity is my name, okay.
Trinity가 내 이름이긴 한데...
영어 나오고 우리말 해석 나오거나, 우리말 나오고 영어 작문 나온다.
뭔가 삘이 오시는가?
글타.
영어 나오고 우리말 해석 나오는 걸 뒤집으면 그게 작문이 된다. 우리말 해석 보고 영어로 해보는 연습장이 된다는 말이다.
영어 책 다루다보면 이런 짓 많이 한다.
아예 한글 해석을 몽땅 날려버리고 영어만 남겨야 한다거나, 이금 얘기한 것처럼 영어와 한글 순서를 바꿔야 한다거나...
한글이 포함된 줄 날리는 얘기는 했으니 순서 바꾸는 걸 짱구굴려보자.
영어 공부하는 사람이면 이거 응용 잘하면 일반적인 영어책을 작문책으로 바꿔버릴 수도 있다는 말이다.
Are you Trinity?
니가 튜니티냐?
Who's asking?
넌 누군데?
요렇게 돼 있는 걸...
니가 튜니티냐?
Are you Trinity?
넌 누군데?
Who's asking?
요렇게 바꿀 수 있다는 말이다. 이거 일일이 손으로 바꾸려면... 더 이상 말안하겠다ㅡ.ㅡ
일단 패턴을 인식해보자. 무슨 짓을 하든 가장 먼저 할일은 '패턴 인식'이다.
패턴 인식: 영어만 있는 줄[줄바꿈]한글이 포함된 줄
패턴 아주 쉽게 인식된다. 영어줄[줄바꿈]한글줄[줄바꿈]영어줄[줄바꿈]한글줄... 이거 계속 반복된다는 말이다.
그럼 저 순서를 뒤집으려면?
영어만 있는 줄과 한글이 포함된 줄을 찾아서 아래위를 바꿔주면 그만이다.
그럼 한글이 포함된 줄과 영어가 포함된 줄을 찾는 찾기 패턴이 필요하겠지?
한글 줄 찾기 패턴은 지난회에 배웠다.
한글 줄 찾기 패턴: ^[^a-zA-Z0-9]+$|^[a-zA-Z0-9]+[^a-zA-Z0-9]+$
헷갈리면 지난회 다시 읽어보시라.
영어만 있는 줄 찾기 패턴은 이렇다.
영어 줄 찾기 패턴: ^[ a-zA-Z0-9,.!?']+$
일단 한글 줄 찾기 패턴과 달리 공백이 문자 집합에 들어가 있고, 구둣점이나 기호 등 영어줄에 포함될만한 다른 기호들 역시 써줘야 한다. 예를 들어, 문장부호나나 어퍼스트로피 말고도 인용부호나 괄호가 사용된다면 " 와 ( ) 도 써줘야 한다는 거다. 영어줄에 포함될 문자는 모두 입력한다. 위의 예에서는 문장부호와 어퍼스트로피만 나와서 간단하게 썼다.
한글 줄과 영어 줄을 함께 찾아야 하니까 저 패턴을 조합한다.
영어줄/한글줄 찾기 패턴: (^[ a-zA-Z0-9,.!?']+$)\n(^[^a-zA-Z0-9]+$|^[a-zA-Z0-9]+[^a-zA-Z0-9]+$)
두 패턴을 조합하면서 두가지 변화가 생겼다.
하나는, 괄호로 영어줄 패턴 부분과 한글줄 패턴 부분을 감싸준 거다. 다시말해, 바꾸기에 활용할 수 있도록 영어줄과 한글줄을 기억하라는 말이다. 바꾸기에서 \1 라고 하면 영어줄을, \2 라면 한글줄을 참조하게 되지 않겠는가?
두번째 변화는 \n 가 영어줄 패턴과 한글줄 패턴에 끼어든거다. 뭐, 어렵지 않게 이해갈거다. 영어줄과 한글줄은 줄바꿈 문자로 나눠져 있으니까 당근 줄바꿈 문자에 해당하는 \n 가 필요하다.
자, 그럼 바꾸기 패턴은 어떻게 하면 될까? (이미 답 다 말해줬다.)
바꾸기 패턴: \2\n\1
이게 다다. 영어줄[줄바꿈]한글줄 을 한글줄[줄바꿈]영어줄 로 순서만 바꾸라는 거다. \2 는 영어줄 이고 \1 는 한글줄을 기억하고 있지 않은가. 그러니까 이걸 뒤집으면 순서가 바뀐다.
영어, 한글, 영어, 한글 순으로 돼 있는 문서다.
찾기를 하면 몽땅 찾는다. 당연하다. 영어줄 한글줄 연속돼 있는 걸 다 찾으니까...
그리고 바꾸기를 누르면...
한글, 영어, 한글, 영어... 요렇게 바뀐다.
정규식... 무서운 놈이다^^
저 패턴이 수천번 반복돼도 버튼 한방에 바꿔준다.
상상력만 따라준다면 정규식으로 할 일 많다.
오늘은 연습문제 한방으로 끝내련다.
'JAVA > regex 정규표현식' 카테고리의 다른 글
대두족장 정규식 편집기 0.1a Preview (0) | 2014.10.28 |
---|---|
Ver. 0.1a - 대두족장 정규식 편집기 (0) | 2014.10.28 |
천단위 콤마 찍기 - 미리보기/돌아보기 기능 (0) | 2014.10.28 |
대두족장 정규식 편집기 프로젝트 (0) | 2014.10.28 |
패턴 인식 5 - 골라 골라~ (0) | 2014.10.28 |
패턴 인식 4 - 보이는 것과 보이지 않는 것 (0) | 2014.10.28 |
패턴 인식 3 - 정규식 입문 (0) | 2014.10.28 |
패턴 인식 2.5 - pop quiz! (0) | 2014.10.28 |