티스토리 뷰
지난시간에 정규표현식(정규식) 에 대해 간단하게 알아보았다. (주민번호 뒷자리 *표시로 변경하기)
2020/08/31 - [IT 개발/Python] - 파이썬공부 35.정규식표현(주민번호 뒷자리 *표시로 변경하기)
이번시간에는 정규 표현식에 대해 좀더 자세히 알아보도록 하겠다.
정규 표현식의 기초, 메타 문자
여기서 메타문자란? 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자를 말한다.
. ^ $ * + ? { } [ ] \ | ( )
정규 표현식에서 위 메타 문자를 사용하면 특별한 의미를 갖는다.
문자 클래스 [ ]
가장 먼저 살펴볼 메타 문자는 바로 문자 클래스(character class)인 []이다.
문자클래스로 만들어진 정규식은 "[ ] 사이의 문자들과 매치" 라는 의미를 갖는다.
*문자 클래스를 만드는 메타 문자인 [ ] 사이에는 어떤 문자도 들어갈수 있다.
즉 정규 표현식이 [abc]라면 이표현식의 의미는 "a, b, c 한개의 문자와 매치"를 뜻한다. 예를 들면
문자열 "apple", "before", "duble" 가 정규식 [abc]와 어떻게 매치되는 지 살펴보자.
- apple은 정규식과 일치하는 문자 a 가 포함되어 있으므로 매치
- before는 정규식과 일치하는 문자 b가 포함되어 있으므로 매치
- duble은 정규식과 일치하는 a, b, c 중 어느 하나도 포함하고 있지 않으므로 매치되지 않음.
[ ] 안에 두 문자 사이에 하이프(-)을 사용하면 두문자 사이의 범위(from-to)를 의미한다.
예를 들어 [a-c]는 정규표현식 [abc]와 동일하고, [1-5]는 [12345]와 동일하다.
다음은 하이픈을 사용하는 정규식의 예이다.
- [a-zA-Z] : 알파벳 모두
- [0-9] : 숫자
(주의) 문자 클래스[] 안에는 어떤 문자나 메타 문자도 사용할 수 있지만 주의해야할 문자가 1가지 있다.
그것은 바로 ^ 인데, 이 문자를 메타 문자 안에 넣게 되면 반대(not)이라는 의미를 갖기 때문에
[^0-9] 라는 정규표현식은 원래[0-9] 즉 숫자를 나타내는 정규식에서 숫자가 아닌문자 즉 문자만해당하는
정규식이 된다.
[자주 사용하는 문자 클래스]
[0-9] 또는 [a-zA-Z] 등은 무척 자주 사용하는 정규 표현식이다.
이렇게 자주 사용하는 정규식은 별도의 표기법으로 표현할 수 있다. 다음을 기억해 두자.
\d
- 숫자와 매치, [0-9]와 동일한 표현식이다.\D
- 숫자가 아닌 것과 매치,[^0-9]
와 동일한 표현식이다.\s
- whitespace 문자와 매치,[ \t\n\r\f\v]
와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.\S
- whitespace 문자가 아닌 것과 매치,[^ \t\n\r\f\v]
와 동일한 표현식이다.\w
- 문자+숫자(alphanumeric)와 매치,[a-zA-Z0-9_]
와 동일한 표현식이다.\W
- 문자+숫자(alphanumeric)가 아닌 문자와 매치,[^a-zA-Z0-9_]
와 동일한 표현식이다.
대문자로 사용된 것은 소문자의 반대임을 추측할 수 있다.