- 프롤로그
- 개발 첫걸음
- 파이썬 기초
- 파이썬 중급
- 파이썬 고급
- 내장 함수 톺아보기
- 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
- 변수의 범위 – 이름 검색의 범위
- 파이썬 심화
- 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
- 데코레이터 – 함수의 기능을 강화하기
- 프로퍼티
- 제너레이터
- async와 await
- 객체로서의 클래스 – 클래스를 동적으로 정의하기
- 파이썬 프로젝트 실습
- 원카드 게임 만들기 (1)
- 원카드 게임 만들기 (2)
- 원카드 게임 만들기 (3) (작성중)
- 턴제 자동 전투 게임 만들기 (작성중)
- 실전 (파이썬 외적인 것들)
- 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
- 유니코드 – 컴퓨터에서 문자를 표기하는 방법
- html, css, 인터넷 – 자동화 첫 걸음 내딛기
- 네트워크 – 인터넷으로 통신하는 방법
- 문서 – 문맥을 읽어보기
정규 표현식이 필요한 이유
드론 덕후인 김철수 씨는 항공안전기술원의 드론업체 현황 의 데이터를 소장하고 싶습니다. 그러나 한꺼번에 복사-붙여넣기를 시도하려고 해도 다음과 같은 텍스트로 밖에 붙여 넣어지지 않았습니다. 이를 유의미한 데이터로 갖고 싶습니다. 일일히 하나하나 복사-붙여넣기를 해야 할까요? 그렇지만 다행히도 김철수 씨는 파이썬을 사용할 줄 압니다. 어떻게든 되지 않을까요?
번호/업체명/모델명/용도/연락처/홈페이지
1/그리폰 다이나믹스/XD-1700SP, HD-2400SP/물품수송, 촬영, 국토조사, 감시정찰/053-983-1793/http://www.gryphondynamics.co.kr
2/㈜네스앤텍/SWID series, STINGRAY/촬영, 감시정찰, 경비/042-932-8086/http://www.nesnt.com
3/네온테크/ND-810, ND-820, ND-FW2H/물품수송, 감시정찰, 촬영, 국토조사/070-5090-2092/http://www.neontech.co.kr
4/두시텍/KnDrone 480S, KnDroneX/촬영, 수색/구조, 경비, 기타/042-280-1400/http://www.dusi.co.kr
5/베셀/SCANNER-MC1/물품수송, 안전진단, 경비, 수색/구조, 하천감시/031-8092-0865/http://www.vessel21.com
6/샘코/듀오드론, 폭스레이/국토조사, 촬영, 경비, 수색/구조, 기타/055-850-7787/http://www.samcokorea.com
...
단순한 텍스트의 나열에서 어떻게 유의미한 텍스트를 뽑아낼 것인가가 관건입니다. 어떻게 하면 좋을까요? 바로 정규 표현식을 이용해보는 것입니다!
정규 표현식
정규 표현식이란 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어(위키백과)이며, 줄여서 정규식이라고도 합니다. 영어로는 Regular Expression 이며, 줄여서 regex라고도 합니다. 특정한 규칙이 있는 문자열을 다루기 쉽게 해주는 편리한 도구라고 생각하시면 됩니다!
이 정규식에도 특별한 문법이 있습니다. 물론 외워야 잘 쓸 수 있겠지요? 정규식은 문자열을 다루게 되는 상황이면 거의 예외없이 사용해야 합니다. 또한 모든 프로그래밍 언어에 걸쳐서 지원하기 때문에 범용성 또한 두말 할 나위 없지요.
정규식은 프로그래밍 세계에서 아주 유명한 녀석입니다. 그만큼 설명하는 문서도 아주 많습니다. 아무래도 제가 작성하는 글들 보다는 좀 더 검증된 글들이 많으니 레퍼런스를 아래 쪽에 남겨두겠습니다.
패턴
정규식에서의 패턴은 문법이라고 생각하시면 됩니다. 우선 패턴은 설명하기 까다로우므로 일괄적으로 설명한 후에 예시를 위주로 살펴보겠습니다. 패턴은 다음과 같은 특수한 용도의 문자와, 일반적으로 찾을 문자로 구분됩니다.
- 특수 용도 문자 :
. [] * + ? {} ^ $ () |
- 일반 문자 : abcd 등등
문자 하나를 대변하기
모든 문자
- 사용하는 방법 :
.
- 설명 : 모든 종류의 문자 하나를 대변합니다. (단, 줄바꿈 문자는 옵션을 수정해야야 합니다.)
아무 거나 하나의 글자
- 사용하는 방법 :
[사용할 문자들]
- 설명 :
- 대괄호(
[]
) 안에 있는 문자 중 아무 거나 하나의 글자를 대변합니다. - 하이픈(
-
)을 통해 범위를 지정할 수 있습니다. 예를 들어[a-z]
라면 모든 영문 소문자를 대변합니다.[a-zA-Z0-9]
처럼 여러 범위도 지정 가능합니다. - 대괄호가 시작할 때
^
를 넣어주면 결과가 반전이 됩니다. 예를 들어[^abc]
라면 하나의 글자는 들어가지만 a, b, c가 아닌 것들에 대해 대응됩니다. - 대소문자 구분 됩니다.
- 대괄호(
- 예시
패턴 | 만족 | 불만족 |
---|---|---|
b[aei]d |
bad , bed , bid |
bod , bd , bAd 등 |
hi[1-9] |
hi1 , hi2 , … , hi9 |
hi0 , hi 등 |
b[a-z]d |
bad , bbd , … , bzd |
bd , bAd , bAad 등 |
b[A-Za-z]d |
bad , bbd , … , bzd , bAd , bBd , … bZd |
bd , bAad 등 |
b[^aei]d |
bbd , bEd , bzd 등 |
bad , bed , bid , bd 등 |
문자가 얼마나 반복되는지 지정하기
여기서 나오는 문법들은 바로 앞의 문자나 그룹에 대해 작용합니다. 예시를 보면서 살펴봅시다.
0번 이상 반복한다
- 사용하는 방법 :
대상문자*
- 예시
패턴 | 만족 | 불만족 |
---|---|---|
bc*d |
bd , bcd , bcccd 등 |
bcad 등 |
oh[5-9]*s |
oh59786969666s , ohs 등 |
oh89 , oh762s 등 |
1번 이상 반복한다
- 사용하는 방법 :
대상문자+
패턴 | 만족 | 불만족 |
---|---|---|
bc+d |
bcd , bcccd 등 |
bd , bcad 등 |
oh[5-9]+s |
oh59786969666s 등 |
oh89 , oh762s , ohs 등 |
0번 또는 1번 반복한다
- 사용하는 방법 :
대상문자?
패턴 | 만족 | 불만족 |
---|---|---|
bc?d |
bcd , bd 등 |
bccd 등 |
oh[5-9]?s |
oh5s , oh8s , ohs 등 |
oh89s , oh2s , 등 |
n번에서 m번 만큼 반복한다
- 사용하는 방법 :
대상문자{m,n}
패턴 | 만족 | 불만족 |
---|---|---|
bc{2,4}d |
bccd , bcccd , bccccd |
bcd , bcccccd 등 |
oh[5-9]{2,4}s |
oh586s , oh87s 등 |
oh89987s , oh27s , 등 |
특수한 위치
시작 지점
- 사용법:
^패턴
^
는 시작 지점을 뜻합니다. 즉 검사할 문자열의 가장 시작부터 탐색합니다. 예를 들어^.{3}
는 시작 지점에서 아무 3개의 문자에 대응됩니다.
끝 지점
- 사용법 :
패턴$
- 설명 :
$
는 끝 지점을 뜻합니다. 즉 검사할 문자열의 가장 끝에서부터 탐색합니다. 예를 들어.{3}$
는 끝에서 아무 3개의 문자에 대응됩니다.
그룹
- 사용법 :
(묶을패턴)
- 설명 : 반복 지정(
*
,+
,?
,{}
)을 그룹 기준으로 하게 해줄 수도 있고, 캡처를 통해 치환 시 유용하게 쓸 수 있습니다. - 예시
패턴 | 만족 | 불만족 |
---|---|---|
a(bc)+d |
abcd , abcbcd 등 |
bcd , bcccccd 등 |
oh[5-9]{2,4}s |
oh586s , oh87s 등 |
oh89987s , oh27s , 등 |
또는
- 사용법 :
패턴|패턴
- 설명 : A 또는 B를 만족시키는 패턴을 만듭니다. 그룹(
(패턴)
)내에서도 사용될 수 있습니다.
패턴 | 만족 | 불만족 |
---|---|---|
aoc|abd |
aoc , abd |
aocd 등 |
o(st|m)o |
osto , omo |
oso 등 |
이메일 찾아보기
파이썬에서 정규식 이용해보기
파이썬에서 정규식을 사용하는 방법
레퍼런스
연습 문제
- 정규 표현식을 줄여서 무엇이라고 하는가?
- 정규 표현식을 영어로 하면 무엇인가?
- 패턴에 쓰이는 다음 특수문자가 무엇인지 설명하라 ->
. [] * + ? {} ^ $ () |
- 다음 패턴이 무엇을 의미하는지 설명하라
photo[0-9][0-9]?
01[0-9]-[0-9]{3,4}-[0-9]{4}
- 프롤로그
- 개발 첫걸음
- 파이썬 기초
- 파이썬 중급
- 파이썬 고급
- 내장 함수 톺아보기
- 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
- 변수의 범위 – 이름 검색의 범위
- 파이썬 심화
- 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
- 데코레이터 – 함수의 기능을 강화하기
- 프로퍼티
- 제너레이터
- async와 await
- 객체로서의 클래스 – 클래스를 동적으로 정의하기
- 파이썬 프로젝트 실습
- 원카드 게임 만들기 (1)
- 원카드 게임 만들기 (2)
- 원카드 게임 만들기 (3) (작성중)
- 턴제 자동 전투 게임 만들기 (작성중)
- 실전 (파이썬 외적인 것들)
- 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
- 유니코드 – 컴퓨터에서 문자를 표기하는 방법
- html, css, 인터넷 – 자동화 첫 걸음 내딛기
- 네트워크 – 인터넷으로 통신하는 방법
- 문서 – 문맥을 읽어보기