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)

참고

https://wikidocs.net/4308

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

+ Recent posts