오랑우탄의 반란
[Python] 정규표현식, re모듈 사용 기초 정리 본문
반응형
정규식의 기초 개념과 간단한 사용법에 대해 알아보겠습니다.
더 구체적인 메소드나 개념설명은 파이썬 re 사용 공식문서를 확인해주세요.
정규 표현식 (re 모듈)
파이썬에서 정규 표현식을 지원하는 re 모듈을 제공하는데요
이를 사용해 문자열의 일치 여부를 확인할 수 있습니다.
정규식 메타문자
우선 정규식에 사용되는 메타문자의 종류와 쓰임을 간단히 짚고 넘어갑시다.
메타문자 | 의미 | 예시 |
[] | 문자 클래스, [] 안에 들어간 문자 중에 있는지 확인 - 로 범위 설정 |
[a-zA-Z] : 모든 알파벳 [0-9] : 모든 숫자 |
. | \n (줄바꿈)을 제외한 임의의 문자 | a.b: a + 모든_문자 + b aab True |
* | * 앞의 문자 0번 이상 반복 | ca*t: a 가 0부터 무한대까지 반복 ct True (a가 0번 반복) |
+ | + 앞의 문자 1번 이상 반복 | ca+t: a 가 1부터 무한대까지 반복 ct False (a가 0번 반복) |
{m, n} | *, + 사용 시 반복 횟수 제한 (*+? 위주로 사용하는 거 권장) |
ca{2}t: c + a 2번 반복 + t ca{2:}t: c + a 2번 이상 반복 + t ca{2,5}t: c + a 2~5회 반복 + t caat True |
? | {0, 1} 의미, 있어도 되고 없어도 된다는 뜻 | ab?c: a + b 가 있어도, 없어도 됨 + c abc True, ac True |
^ | ^ 뒤의 문자로 문자열 시작 | ^python: 문자열 항상 python으로 시작 python one True |
$ | $ 앞의 문자로 문자열 끝 | python$: 문자열 항상 python으로 끝 python one False |
re.compile 은 정규식으로 만들어진 패턴으로, 문자열의 일치 여부 기준이 됩니다.
import re
p = re.compile('[a-z]+')
# 알파벳 1개 이상 보유 여부 확인
패턴 객체 메서드
method | 목적 |
match() | 문자열의 처음부터 정규식과 매치되는지 확인, 매치되는 객체 or None 리턴 |
search() | 문자열 전체를 검색해 정규식과 매치되는지 확인 , 매치되는 객체 or None 리턴 |
findall() | 정규식과 매치되는 모든 문자열을 리스트로 리턴 |
finditer() | 정규식과 매치되는 모든 문자열을 반복 가능한 객체로 리턴 |
아래와 같이 조건문으로 묶어줘서 문자열 일치 여부를 확인할 수 있습니다.
p = re.compile('정규표현식')
check = p.match('문자열')
if check:
print(check.group())
else:
print('No match')
축약형태는 아래와 같습니다.
check = re.match('정규표현식', "문자열")
메서드의 몇 가지 활용 예시입니다.
# match
check = p.match('3python')
print(check)
>>> None
# search
check = p.match('3python')
print(check.group())
>>> python
# findall
result = p.findall("life is too short")
print(result)
>>> ['life', 'is', 'too', 'short']
match 객체 메서드
method | 목적 |
group | 매치된 문자열을 리턴 |
start | 매치된 문자열의 시작 위치 리턴 |
end | 매치된 문자열의 끝 위치를 리턴 |
span | 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 리턴 |
match에 사용한 예시
m = p.match("python")
m.group()
>>> 'python'
m.start()
>>> 0
m.end()
>>> 6
m.span()
>>> (0, 6)
seach 에 사용한 예시
m = p.search("3 python")
m.group()
>>>'python'
m.start()
>>> 2
m.end()
>>> 8
m.span()
>>> (2, 8)
컴파일 옵션
option | 축약 | 목적 |
DOTALL() | re.S | .(dot)이 줄바꿈 문자 \n을 포함하도록 함, 문자열이 여러 줄일 때 사용 |
IGNORECASE() | re.I | 대소문자에 관계없이 매치될 수 있게 함 |
MULTILINE() | re.M | 주로 ^, $ 를 사용할 때 여러 줄과 매치될 수 있게 함 |
VERBOSE() | re.X | verbose 모드를 사용할 수 있게 해 정규식을 보기 편하게 만들 수 있고 주석 등 사용 가능 |
MULTILINE 사용 예시
# multiline.py
import re
p = re.compile("^python\s\w+", re.MULTILINE)
data = """python one
life is too short
python two
you need python
python three"""
print(p.findall(data))
>>> ['python one', 'python two', 'python three']
VERBOSE 사용 예시
charref = re.compile(r"""
&[#] # Start of a numeric entity reference
(
0[0-7]+ # Octal form
| [0-9]+ # Decimal form
| x[0-9a-fA-F]+ # Hexadecimal form
)
; # Trailing semicolon
""", re.VERBOSE)
역슬래시 \ 오류
역슬래시 \ 를 사용한 정규식을 파이썬으로 실행할 경우 이런 오류가 뜰 수 있습니다.
이때의 해결방법은 간단하고, 2가지가 있습니다.
# 열슬래시 2개 사용
p = re.compile("^python\\s\\w+", re.MULTILINE)
# raw string 표현법 (앞에 r 붙여주기)
p = re.compile(r"^python\s\w+", re.MULTILINE)
반응형
'PYTHON > 개념정리' 카테고리의 다른 글
파이썬 문자열/숫자열 기초 (0) | 2024.07.15 |
---|