메타 문자
메타 문자란 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자를 말한다.
. ^ $ * + ? { } [ ] \ | ( )
정규 표현식에 위 메타 문자를 사용하면 특별한 의미를 갖게 된다.
문자 클래스 [ ]
문자 클래스로 만들어진 정규식은 "[ ] 사이의 문자들과 매치"라는 의미를 갖는다.
문자 클래스를 만드는 메타 문자인 [ ] 사이에는 어떤 문자도들어갈 수 있다.
예를 들어 정규 표현식이 [abc]라면 이 표현식의 의미는 "a, b, c 중 한 개의 문자와 매치"를 뜻한다.
"a" -> 정규식과 일치하는 문자인 "a"가 있으므로 매치
"before" -> 정규식과 일치하는 문자인 "b"가 있으므로 매치
"dude" -> 정규식과 일치하는 문자인 "a". "b", "c" 중 어느 하나도 포함하고 있지 않으므로 매치되지 않는다.
[ ] 안의 두 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위(From - To)를 의미한다.
예를 들어 [a-c]라는 정규 표현식은 [abc]와 동일하고 [0-5]는 [012345]와 동일하다.
[a-zA-Z] : 알파벳 모두
[0-9] : 숫자
[가-힣] : 한글 모두 (한글의 첫번째 글자는 가이고 마지막 글자는 힣이다)
문자 클래스([ ]) 안에는 어떤 문자나 메타 문자도 사용할 수 있지만 주의해야 할 메타 문자가 1가지 있다. 그것은 바로 ^인데, 문자 클래스 안에 ^메타 문자를 사용할 경우에는 반대(not)라는 의미를 갖는다.
숫자 대표문자 \d
\d는 숫자를 대표하는 정규표현식이다. 이때 d는 digit을 뜻한다.
글자 대표문자 \w
\w는 글자를 대표햐는 정규표현식이다.
\w는
- a, b, c, 가, 나, 다, 1, 2 와 같은 문자와 숫자를 포함한다.
- 특수문자는 포함하지 않지만 _(언더스코어)는 포함한다.
하나 이상 +
\d는 숫자를 한글자만 찾는다.
043이나 2568같이 연결된 숫자를 찾고 싶을 때는 +를 이용하면 된다.
+는 "하나 혹은 그 이상 연결된"이라는 뜻이다.
따라서 "\d+"는 "하나 혹은 그 이상 연결된 숫자"를 의미한다.
0개 이상 *
*는 "0개 이상"이라는 뜻이다.
따라서 \d*는 "숫자가 0개이상이다"를 의미한다.
이를 이용하면 자연수는 [1-9]\d*로 표현할 수 있다.
있거나 없거나 ?
?는 "있거나 없거나"라는 뜻이다.
따라서 -?는 "-가 있거나 없다"를 의미한다.
이를 연속하는 숫자는 \d+와 조합하면 전화번호를 찾는 정규표현식(\d+-?\d+-\d+)을 만들 수 있다.
n번
{숫자}는 "숫자번 반복한다"는 뜻이다.
예를 들어 \d{2}는 "숫자가 연속 두번 나온다"를 의미한다.
n~m번
{숫자1, 숫자2}는 "숫자1부터 숫자2까지 반복한다"는 뜻이다.
예를 들어, \w{2,3}는 "문자가 2~3번 나온다"를 의미한다.
기타 대표문자
\s : 공백문자(스페이스, 탭, 뉴라인)
\S : 공백 문자를 제외한 문자
\D : 숫자를 제외한 문자
\W : 글자 대표 문자를 제외한 글자들(특수문자, 공백 등)
그룹 ( )
정규 표현식에서 ( ) 괄호는 그룹을 의미한다.
import re
p = re.compile('(\d+)([SDT])([*#]?)')
findall()
findall()은 정규식과 매치되는 모든 문자열을 리스트형식으로 리턴한다.
dart = p.findall(dartResult)
참고: programmers.co.kr/learn/courses/11
'Python' 카테고리의 다른 글
[Python] [정렬] list.sort()와 sorted()의 차이 (0) | 2021.05.10 |
---|---|
[Python] 문자 삭제 함수 strip (0) | 2021.04.11 |
[Python] 문자열 변경 함수 replace, 문자 변경 함수 translate (0) | 2021.03.29 |
[Python] 문자열 포맷팅 방법 (0) | 2021.01.13 |
[Python] range함수 (0) | 2021.01.13 |