정규표현식
정규표현식이란
- 복잡한 문자열을 처리할 때 사용하는 기법, 모든 언어 공통
정규표현식은 왜 필요한가?
- 문자열에 관련된 복잡한 문제를 해결 해야 될 때 정규 표현식을 사용하게 되면 짧고 간결하게 문제를 해결할 수 있게 해준다.
문자 클래스 []
[abc]
- [] 사이의 문자들과 매치
- "a"는 정규식과 일치하는 문자인 "a"가 있으므로 매치
- "before"는 정규식과 일치하는 문자인 "b"가 있으므로 매치
- "dude"는 정규식과 일치하는 문자인 a, b, c 중 어느 하나도 포함하고 있지 않으므로 매치되지 않음
- 하이픈을 사용하여 From-To로 표현 가능
- ex) [a-c] = [abc], [0-5] = [012345]
Dot(.)
a.b
- 줄바꿈(₩n)을 제외한 모든 문자와 매치
- "aab"는 가운데 문자 "a"이 모든 문자를 의미하는 '.'와 일치하므로 정규식과 매치
- "a0b"는 가운데 문자 "0"이 모든 문자를 의미하는 '.'와 일치하므로 정규식과 매치
- "abc"는 "a"문자와 "b" 문자 사이에 어떤 문자라도 하나는 있어야 하는 이 정규식과 일치하지 않으므로 매치되지 않는다.
반복(*)
ca*t
- "ct"는 "a"가 0번 반복되어 매치
- "cat"는 "a"가 0번 이상 반복되어 매치 (1번 반복)
- "caaat"는 "a"가 0번 이상 반복되어 매치 (3번 반복)
반복(+)
ca+t
- "ct"는 "a"가 0번 반복되어 매치되지 않음
- "cat"는 "a"가 1번 이상 반복되어 매치 (1번 반복)
- "caaat"는 "a"가 1번 이상 반복되어 매치 (3번 반복)
반복 ({m, n}, ?)
ca{2}t
- "cat"는 "a"가 1번만 반복되어 매치되지 않음
- "caat"는 "a"가 2번 반복되어 매치
ca{2,5}t
- "cat"는 "a"가 1번만 반복되어 매치되지 않음
- "caat"는 "a"가 2번 반복되어 매치
- "caaaaat"는 "a"가 5번 반복되어 매치
ab?c
- "abc"는 "b"가 1번 사용되어 매치
- "ac"는 "b"가 0번 사용되어 매치
- ? == {0,1}와 같은 표현
정규표현식 시작하기
import re
p = re.compile('ab*')
- 파이썬에서 정규 표현식을 지원하는 re 모듈
- p는 패턴 객체
match
import re
p = re.compile('[a-z]+')
m = p.match('python')
print(m)
<re.Match object; span=(0, 6), match='python'>
search
import re
p = re.compile('[a-z]+')
m = p.search('python')
print(m)
<re.Match object; span=(0, 6), match='python'>
메타문자
^
import re
print(re.search('^Life', 'Life is too short'))
print(re.search('^Life', 'My Life'))
- 맨 처음을 나타내는 매타문자이다.
- 결과를 보면 두번째 프린트문은 첫 번째 부분이 일치하지 않기 때문에 None이 반환된다.
그루핑 ()
import re
p = re.compile('(ABC)+')
m = p.search('ABCABCABC OK?')
print(m)
print(m.group())
전방탐색 : 긍정형 (?=)
import re
p = re.compilie(".+(?=:)")
m = p.search("http://google.com")
print(m.group())
- 검색조건에는 포함되나 결과에는 포함되지 않는다.
사진 출처 - https://sunyzero.tistory.com/215
사진 출처 - https://omicro03.medium.com/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC-nlp-5%EC%9D%BC%EC%B0%A8-70b1d773d30a
git
git restore
git restore 파일명
- 수정한 내용을 삭제하고 기존의 상태로 되돌린다.
<참고>