정규표현식
참고 문헌
정규표현식
복잡한 문자열을 처리할 때 사용하는 기법 파이썬만의 고유 문법이 아니라 문자열을 처리하는 모든 곳에서 사용하는 일종의 형식 언어
특정한 패턴과 일치하는 문자열를 ‘검색, ‘치환’, ‘제거’하는 기능을 정규 표현식을 통해 가능하게 됨
정규표현식의 도움없이 패턴을 찾는 작업(Rule 기반)은 작업의 공수가 많음
- 이메일 형식 판별, 전화번호 형식 판별, 숫자로만 이루어진 문자열 등
보통 패턴을 찾을 때, raw string이 사용되는 경우가 있는데 아래와 같이 문자열 앞에 r을 붙여 사용
>> a = 'abcdef\n'
>> print(a)
abcdef
>> b = r'abcdef\n'
>> print(b)
abcdef\n
위와 같이 문자열이 구성된 그대로 문자열을 반환해줌
정리
정규 표현식에서는 아래와 같은 메타 문자들이 존재함
- 메타 문자는 원래 그 문자가 가진 뜻이 아닌 다른, 특별한 의미를 가진 문자
.^$*+?{}[]\|()
이런 메타 문자를 이용하여 정규표현식을 나타내고 각 메타 문자마다 의미를 가지고 있음
참고로 정규식에서 문자 하나하나를 정확히 명시하고 있으면 그 문자 자체를 의미
- ‘a’, ‘3’, ‘ㄱ’ 라는 정규 표현식은 각 문자를 의미함
- ‘test’라는 정규 표현식은 ‘test’라는 문자열 자체를 의미
일반적으로 정규식을 나타낼 때, ^
은 시작, $
d은 끝, 즉 각각 문자열의 시작과 끝을 의미함
[]
[]
로 만들어진 정규식은 괄호 사이 문자들과 매치함을 의미
[125abc] 라는 표현식의 의미는 1, 2, 5, a, b, c, 중 한 개의 문자와 매치를 의미
- “a” 는 정규식 안에 일치하는 문자인 a가 있으므로 매치
- “test”는 정규식과 일치하는 문자가 없으므로 매치되지 않음
- “1st”는 정규식과 일치하는 문자인 1이 있으므로 매치
[]
안에 -
(하이픈) 이 존재하면 두 문자 사이의 범위를 의미하고 숫자도, 문자도 가능
-
[1-5]
는[12345]
과 동일 -
[e-h]
는 [efgh]와 동일
특히 아래와 같은 범위를 표현할 때 많이 사용
- 모든 숫자 : [0-9]
- 모든 소문자: [a-z]
- 모든 대문자 : [A-Z]
- 모든 대,소문자 : [a-zA-Z]
[]
안에 사용하는 ^
문자는 반대라는 의미를 가짐
[]
안에서는 일반적은^
문자와는 다른 의미이기 때문에 주의
자주 사용되는 문자 클래스 (charecter class)
문자 클래스는 특정 집합에 포함된 모든 기호에 일치하는 특별한 표현
\d
숫자들과 매치가 되는 문자
[0-9]
와 동일한 표현
\D - 문자 클래스
숫자가 아닌 것들을 의미하고, 그것들과 매치
[^0-9]
와 동일
위의 \d
와 반대
\s - 문자 클래스
White space와 매치
[ \t\n\r\f\v]
와 동일하고 맨 앞의 빈칸은 한 칸 띄어쓰기 (space) 의미
\t
: 탭\n
: 줄바꿈\r
: return\f
: 폼피드, 페이지 구분자\v
: 수직 탭
\S - 문자 클래스
White space를 제외한 문자와 매치
[^ \t\n\r\f\v]
와 동일
위의 \s
와 반대
\w - 문자 클래스
문자, 숫자, _와 매칭
[a-zA-Z0-9_]
와 동일
\W - 문자 클래스
문자, 숫자, _가 아닌 것과 배칭
[^a-zA-Z0-9_]
와 동일
. (dot)
개행 문자 (\n
) 를 제외한 모든 문자를 의미
j.h
이라는 정규식은 j와 h 사이에 어떤 문자가 들어가도 매치가 된다는 의미
즉, j2h, jfh 등과는 매치가 되지만 jh2와는 매치가 되지 않음
하지만 []
안에 .
이 들어가는 경우는 문자 자체를 의미
j[.]h
는 j2h, jfh 과는 매치되지 않고 j.h 라는 문자열과 매칭