정규표현식 Dot(.)
줄바꿈 문자인 \n (Enter)을 제외한 모든 문자와 매치됨을 의미한다.
- a.b : a와 b사이에 어떤 문자가 들어와도 매치된다
import re
pat = re.compile("a.b")
print(pat.match('a3b')) # 일치
print(pat.match('aAb')) # 일치
print(pat.match('a b')) # 일치
print(pat.match('a\tb')) # 일치
print(pat.match('a@b')) # 일치
print(pat.match('abc')) # 불일치(a로 시작해서 b로 끝나지 않음)
print("-------------------------------")
# 문자 ' .' 을 찾을 때
pat1 = re.compile("a[.]b")
print(pat1.match('a.b')) # 일치
print("-------------------------------")
# a로 시작하는 3글자를 찾을 때
pat2 = re.compile("a..")
print(pat2.match('ab')) # 불일치
print(pat2.match('a b')) # 일치
print(pat2.match('bab')) # 불일치
결과
<re.Match object; span=(0, 3), match='a3b'>
<re.Match object; span=(0, 3), match='aAb'>
<re.Match object; span=(0, 3), match='a b'>
<re.Match object; span=(0, 3), match='a\tb'>
<re.Match object; span=(0, 3), match='a@b'>
None
-------------------------------
<re.Match object; span=(0, 3), match='a.b'>
-------------------------------
None
<re.Match object; span=(0, 3), match='a '>
None
정규표현식 반복
- * : 앞의 한 문자가 0번 이상 반복
ca*t -> ct, cat, caat, caaat, ...., caaaaaaaat, ...
- + : 앞의 한 문자가 1번 이상 반복
ca*t -> cat, caat, caaat, ...
pat1 = re.compile('ca*t')
pat2 = re.compile('ca+t')
print(pat1.match('ct')) # 일치
print(pat1.match('cat')) # 일치
print(pat1.match('caaaaaaaaat')) # 일치
print("------------------------------")
print(pat2.match('ct')) # 불일치
print(pat2.match('cat')) # 일치
print(pat2.match('caaaaaaat')) # 일치
결과
<re.Match object; span=(0, 2), match='ct'>
<re.Match object; span=(0, 3), match='cat'>
<re.Match object; span=(0, 11), match='caaaaaaaaat'>
------------------------------
None
<re.Match object; span=(0, 3), match='cat'>
<re.Match object; span=(0, 9), match='caaaaaaat'>
- { m ,n } : 최소 m개 부터 최대 n개까지 일치하는 패턴 검색 -> { min, max }
ca{3,5}t -> caaat, caaaat, caaaaat
- m(최소)가 생략되면, 최소 0개 부터를 의미한다.
- n(최대)가 생략되면, 무한대까지를 의미한다.
ca{,3}t -> ct, cat, caat, caaat
ca{3,}t -> caaat, caaaat, .... , caaaaaaaaaaat, ....
- {m} : 반드시 m번 반복
- ca{0,}t -> ca*t 와 같다
- ca{1,}t -> ca+t 와 같다
pat = re.compile("ca{3,5}t")
print(pat.match('caat')) # 불일치
print(pat.match('caaat')) # 일치
print(pat.match('caaaaat')) # 일치
print(pat.match('caaaaaaat')) # 불일치
print("-----------------------------")
pat = re.compile("ca{,3}t")
print(pat.match('caat')) # 일치
print(pat.match('caaat')) # 일치
print(pat.match('caaaaat')) # 불일치
print(pat.match('caaaaaaat')) # 불일치
결과
None
<re.Match object; span=(0, 5), match='caaat'>
<re.Match object; span=(0, 7), match='caaaaat'>
None
-----------------------------
<re.Match object; span=(0, 4), match='caat'>
<re.Match object; span=(0, 5), match='caaat'>
None
None
- ? : 앞의 한 문자가 0번 또는 1번이 있는지 검사한다. (= 있거나 없거나 상관 없다.)
ca{0,1}t -> ca?t
# http이거나 https로 시작하고 url주소는 \n을 제외한 어떤 문자든 상관없이 검색
pat = re.compile("https?://.+")
print(pat.match("http://www.naver.com")) # 일치
print(pat.match("https://www.naver.com")) # 일치
결과
<re.Match object; span=(0, 20), match='http://www.naver.com'>
<re.Match object; span=(0, 21), match='https://www.naver.com'>
'IT 차곡차곡 > Python' 카테고리의 다른 글
[Python] 정규표현식5 - 컴파일 옵션 (DOTALL, IGNORECASE, MULTILINE) (0) | 2021.06.23 |
---|---|
[Python] 정규표현식4 - match 객체의 메서드 (0) | 2021.06.23 |
[Python] 정규표현식2 - 문자열 매치 [ ] (0) | 2021.06.23 |
[Python] 정규표현식 1 (0) | 2021.06.22 |