코딩공부/점프 투 파이썬

## 점프 투 파이썬 - 정규 표현식 시작하기 ( 1 )

integerJI 2020. 3. 28. 18:45

## 점프 투 파이썬 - 정규 표현식 시작하기

 

출처 : https://wikidocs.net/4308

# 정규 표현식의 기초, 메타 문자

. ^ $ * + ? { } [ ] \ | ( )

- 메타 문자란 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자.
- 위 메타 문자를 사용하면 특별한 의미를 갖게 된다.

# 문자 클래스 [ ]

"[ ] 사이의 문자들과 매치"

정규 표현식이 [abc]라면 "a, b, c 중 한 개의 문자와 매치"

- "a"는 정규식과 일치하는 문자인 "a"가 있으므로 매치
- "before"는 정규식과 일치하는 문자인 "b"가 있으므로 매치
- "dude"는 정규식과 일치하는 문자가 없으므로 매치되지 않음

# 하이픈( - )의 사용

- [a-zA-z] : a~z와 A부터 Z까지의 모든 알파벳
- [0-9] : 모든 숫자

# 자주 사용하는 문자 클래스

\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_]와 동일

# Dot(.)
- 줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨을 의미
re.DOTALL 옵션을 주면 \n 문자와도 매치된다.

ex) a.b
- "a + 모든문자 + b"

ex) "aab", "a0b", "abc"와 정규식 a.b의 매치
- "aab"는 가운데 문자 "a"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치
- "a0b"는 가운데 문자 "0"가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치
- "abc"는 "a"문자와 "b"문자 사이에 어떤 문자라도 하나는있어야 하는 이 정규식과 일치하지 않으므로 매치되지 않는다.

# a[.]b
- "a + Dot(.)문자 + b"
- 정규식 a[.]b는 "a.b" 문자열과 매치되고, "a0b" 문자열과는 매치되지 않는다.

# 반복 (*)의 사용

ex)

정규식 문자열 Match 여부 설명
ca*t ct Yes "a"가 0번 반복되어 매치
ca*t cat Yes "a"가 0번 이상 반복되어 매치 (1번 반복)
ca*t caaat Yes "a"가 0번 이상 반복되어 매치 (3번 반복)

# 반복 (+)의 사용

ex)

정규식 문자열 Match 여부 설명
ca+t ct No "a"가 0번 반복되어 매치되지 않음
ca+t cat Yes "a"가 1번 이상 반복되어 매치 (1번 반복)
ca+t caaat Yes "a"가 1번 이상 반복되어 매치 (3번 반복)

# 반복 ({m,n}, ?)의 사용

- ※ {1,}은 +와 동일하고, {0,}은 *와 동일하다.

1. {m}

정규식 문자열 Match 여부 설명
ca{2}t cat No "a"가 1번만 반복되어 매치되지 않음
ca{2}t caat Yes "a"가 2번 반복되어 매치

2. {m, n}
정규식 문자열 Match 여부 설명
ca{2,5}t cat No "a"가 1번만 반복되어 매치되지 않음
ca{2,5}t caat Yes "a"가 2번 반복되어 매치
ca{2,5}t caaaaat Yes "a"가 5번 반복되어 매치

3. ?
정규식 문자열 Match 여부 설명
ab?c abc Yes "b"가 1번 사용되어 매치
ab?c ac Yes "b"가 0번 사용되어 매치