\
- 다른 문자와 함께 사용되어 특수한 의미를 지님
- \d : 숫자를 [0-9]와 동일
- \D : 숫자가 아닌 문자 [^0-9]와 동일
- \s : 공백 문자(띄어쓰기, 탭, 엔터 등)
- \S : 공백이 아닌 문자
- \w : 알파벳대소문자, 숫자 [0-9a-zA-Z]와 동일
- \W : non alpha-numeric 문자 [^0-9a-zA-Z]와 동일
- 메타 캐릭터가 캐릭터 자체를 표현하도록 할 경우 사용
- \. , \\
re.search(r'\sba','i like babana')
>> <re.Match object; span=(6, 9), match=' ba'>
re.search(r'\.\?', '뭐야 이게.?') # \다음 문자 그자체를 찾는다.
<re.Match object; span=(5, 7), match='.?'>
.
- 모든 문자를 의미
re.search(r'e..o', 'hi hello')
>> <re.Match object; span=(4, 8), match='ello'>
반복패턴
- 패턴 뒤에 위치하는 *, +, ?는 해당 패턴이 반복적으로 존재하는지 검사
- '+' -> 1번 이상의 패턴이 발생
- '*' -> 0번 이상의 패턴이 발생
- '?' -> 0 혹은 1번의 패턴이 발생
- 반복을 패턴의 경우 greedy하게 검색 함, 즉 가능한 많은 부분이 매칭되도록 함
- e.g) a[bcd]*b 패턴을 abcbdccb에서 검색하는 경우
- ab, abcb, abcbdccb 전부 가능 하지만 최대한 많은 부분이 매칭된 abcbdccb가 검색된 패턴
- e.g) a[bcd]*b 패턴을 abcbdccb에서 검색하는 경우
re.search(r'a[bcd]*b','abcbdccb') # 후보군 중에서 가장 마지막에 찾은 것을 추출한다.
>> <re.Match object; span=(0, 8), match='abcbdccb'>
가능한 많은 부분이 매칭되게 하기 때문에 가장 마지막에 찾은 것을 추출한다.
re.search(r'b\w+a','bananaa') # \w:알파벳,숫자 +: 앞의 패턴이 반복
>> <re.Match object; span=(0, 7), match='bananaa'>
+와 *의 차이
re.search(r'pi+g','pgii') # + : 1번 이상 앞의 패턴이 반복된 것을 추출한다.
>> None
re.search(r'pi*g','pgii') # * : 0번 이상 앞의 패턴이 반복된 것을 추출한다.
>> <re.Match object; span=(0, 2), match='pg'>
?
re.search(r'httpk?','http://naver.com')
>> <re.Match object; span=(0, 4), match='http'>
k가 0번 나오거나 1번 나오거나
^, $
- ^ : 문자열의 맨 앞부터 일치하는 경우 검색
- $ : 문자열의 맨 뒤부터 일치하는 경우 검색
{} ?
- {m,n}의 경우 m번 에서 n번 반복하나 greedy하게 동작
- {m,n}?로 사용하면 non-greedy하게 동작. 즉, 최소 m번만 매칭하면 만족
re.search('pi{3}g','piiiig') # 검출 안된다.
re.search('pi{3,5}g','piiiig') # i를 최소 3번에서 최대 5번 검출하라
re.search('<.+>','<html>haha</html>')
re.search('<.+?>','<html>haha</html>')
>> <re.Match object; span=(0, 17), match='<html>haha</html>'>
>> <re.Match object; span=(0, 6), match='<html>'>
? 를 붙이면 greedy 하지 않게 검출된다.
re.search(r'a{3,5}', 'aaaaa')
re.search(r'a{3,5}?', 'aaaaa')
>> <re.Match object; span=(0, 5), match='aaaaa'>
>> <re.Match object; span=(0, 3), match='aaa'>
'📌 Python' 카테고리의 다른 글
Python - Tensor (0) | 2021.01.27 |
---|---|
Python - 정규표현식 (3) (0) | 2021.01.24 |
Python - 정규표현식 (1) (0) | 2021.01.22 |
Python - 복소수 함수 만들기 (0) | 2021.01.21 |
Python - 기본 타입으로 함수 만들기 (0) | 2021.01.21 |