728x90
정규표현식이란
정규표현식(Regular Expression)은 문자열에서 패턴을 찾거나 특정 문자열을 대체하거나 추출할 때 사용하는 도구
예를 들어, 이메일 주소를 찾거나 특정한 형식의 날짜를 추출하는 등의 작업에 유용하게 사용될 수 있음
파이썬 주요 메타문자
메타문자는 정규표현식을 나타내는 기초 문자로, 특별한 의미를 가진 문자를 의미
정규 표현식에 다음과 같은 메타 문자를 사용하면 특별한 의미를 갖게 됨
. ^ $ * + ? { } [ ] \ | ( )
- . : 문자 하나를 의미
- [] : 대괄호 안에 있는 문자 중 하나를 의미
정규 표현식이 [abc]라면 이 표현식은 ‘a, b, c 중 한 개의 문자와 매치’를 뜻함
"a", "before"는 각각 a, b가 포함되므로 정규식 [abc]와 어떻게 매치되고, "doll"는 a,b,c중 어느 하나도 포함하지 않으므로 매치되지 않음 - \d : 숫자를 의미, [0-9]와 동일한 표현식
- \w : 알파벳이나 숫자를 의미, [a-zA-Z0-9_]와 동일한 표현식
- \W : 문자+숫자가 아닌 문자를 의미, [^a-zA-Z0-9_]와 동일한 표현식
- \s : 공백 문자를 의미, [ \t\n\r\f\v]와 동일한 표현식
- \S : 화이트스페이스 문자가 아닌 것, [^ \t\n\r\f\v]와 동일한 표현식
- * : 앞의 패턴이 0번 이상 반복되는 것을 나타냄
정규표현식이 ca*t이라면 ct, cat, caat 등이 모두 매치됨 - + : 앞의 패턴이 1번 이상 반복되는 것을 나타냄
정규표현식이 ca+t이라면 ct는 a가 0번이므로 매치되지 않음
cat, caat 등이 매치됨 - ? : 앞의 패턴이 0번 또는 1번 등장하는 것을 나타냄
정규표현식이 ab?c이면 a + b가 있어도 되고 없어도 되지만 c는 필수 - {} : 중괄호 안에 숫자를 넣어 반복 횟수를 지정할 수 있음
정규표현식이 ca{2}t 라면 c + a를_반드시_2번_반복하고 t는 필수
caat과 매치됨
파이썬 정규 표현식 모듈 re
파이썬은 정규 표현식을 지원하기 위해 re(regular expression) 모듈을 제공함
1. 컴파일 객체 생성
import re
p = re.compile('[a-z]+')
2. 정규표현식을 이용한 문자열 검색
match() | 문자열의 처음부터 정규식과 매치되는지 조사 |
search() | 문자열 전체를 검색하여 정규식과 매치되는지 조사 |
findall() | 정규식과 매치되는 모든 문자열을 리스트로 리턴 |
finditer() | 정규식과 매치되는 모든 문자열을 반복 가능한 객체로 리턴 |
# match : 문자열의 처음부터 정규식과 매치되는지 조사
# 매치되는 문자열은 match 객체 리턴
m = p.match("python")
print(m) # re.Match object; span=(0, 6), match='python'>
# 매치되지 않는 문자열은 None 리턴
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 : 정규식과 매치되는 모든 문자열을 리스트로 리턴
result = p.findall("life is too short")
print(result)
['life', 'is', 'too', 'short']
# finditer : 정규식과 매치되는 모든 문자열을 반복 가능한 객체로 리턴
result = p.finditer("life is too short")
print(result)
# 결과
# <callable_iterator object at 0x01F5E390>
for r in result: print(r)
# 결과
# ...
# <re.Match object; span=(0, 4), match='life'>
# <re.Match object; span=(5, 7), match='is'>
# <re.Match object; span=(8, 11), match='too'>
# <re.Match object; span=(12, 17), match='short'>
3. match 객체의 메서드
group | 매치된 문자열을 리턴 |
start | 매치된 문자열의 시작 위치를 리턴 |
end | 매치된 문자열의 끝 위치를 리턴 |
span | 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 리턴 |
m = p.match("python")
m.group() # 'python'
m.start() # 0
m.end() # 6
m.span() # (0, 6)
참고
728x90
'Python' 카테고리의 다른 글
파이썬 클린코드 (0) | 2024.04.28 |
---|---|
파이썬 계약에 의한 디자인(Design by Contract, DbC) (1) | 2024.04.21 |
Python 추상클래스 (0) | 2024.04.12 |
Python Singleton 패턴 (0) | 2024.04.12 |
Python 날짜 시간 데이터 다루기 (feat. pandas) (1) | 2024.04.12 |