연습 사이트
복잡한 문자열을 처리할 때 사용하는 기법, 모든 언어 공통
-
문자 클래스
<aside>
💡 [abc]
</aside>
- [] 사이의 문자들과 매치
- “a”는 정규식과 일치하는 문자인 “a”가 있으므로 매치
- “before”는 정규식과 일치하는 문자인 “b”가 있으므로 매치
- “dude”는 정규식과 일치하는 문자인 a, b, c 중 어느 하나도 포함하고 있지 않으므로 매치 되지 않음
- 하이픈을 사용하여 From-To로 표현 가능
- Ex) [a-c] = [abc], [0-5] = [012345]
-
Dot(.)
<aside>
💡 a.b
</aside>
- 줄바꿈(\n)을 제외한 모든 문자와 매치
- “aab”는 가운데 문자 “a”가 모든 문자를 의미하는
. 과 일치하므로 정규식과 매치
- “a0b”는 가운데 문자 “0”가 모든 문자를 의미하는
.과 일치하므로 정규식과 매치
- “abc”는 “a”문자와 “b”문자 사이에 어떤 문자라도 하나는 있어야 하는 이 정규식과는 일치하지 않으므로 매치 되지 않는다
-
반복(*)
<aside>
💡 ca*t
</aside>
- “ct”는 “a”가 0번 반복되어 매치
- “cat”는 “a”가 n번 이상 반복되어 매치(1번 반복)
- “caaat”는 “a”가 n번 이상 반복되어 매치(3번 반복)
-
반복(+)
<aside>
💡 ca+t
</aside>
- “ct”는 “a”가 0번 반복되어 매치 되지 않음
- “cat”는 “a”가 1번 이상 반복되어 매치(1번 반복)
- “caaat”는 “a”가 1번 이상 반복되어 매치(3번 반복)
-
반복({m, n}, ?)
<aside>
💡 ca{2}t
</aside>
- “cat”는 “a”가 1번만 반복되어 매치 되지 않음
- “caat”는 “a”가 2번 반복되어 매치
<aside>
💡 ca{2, 5}t
</aside>
- “cat”는 “a”가 1번만 반복되어 매치 되지 않음
- “caat”는 “a”가 2번 반복되어 매치
- “caaaaat”는 “a”가 5번 반복되어 매치
<aside>
💡 ab?c
</aside>
- “abc”는 “b”가 1번 사용되어 매치
- “ac”는 “b”가 0번 사용되어 매치
- Ex) ? == {0, 1} 와 같은 표현
match
import re
p = re.compile('[a-z]+')
m = p.match('python')
print(m)
# <re.Match object; span=(0, 6), match='python'>
m = p.match('3 python')
print(m)
# None
search
m = p.search('python')
print(m)
# <re.Match object; span=(0, 6), match='python'>
m = p.search('3 python')
print(m)
# <re.Match object; span=(2, 8), match='python'>
findall & finditer
m = p.findall('life is too short')
print(m)
# ['life', 'is', 'too', 'short']
p = re.compile(r'[a-z]+')
m = re.findall(p, 'life is too short')
print(m)
# ['life', 'is', 'too', 'short']