오랑우탄의 반란

[Python] 정규표현식, re모듈 사용 기초 정리 본문

PYTHON/개념정리

[Python] 정규표현식, re모듈 사용 기초 정리

5&2 2024. 8. 7. 16:55
반응형

 

정규식의 기초 개념과 간단한 사용법에 대해 알아보겠습니다. 

더 구체적인 메소드나 개념설명은 파이썬 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