[python] 파이썬 re모듈

HyunDong Lee·2022년 3월 24일
0
post-thumbnail

파이썬 re 모듈

정규식을 이용한 문자열 검색

re.compile() - 패턴 저장

import re

pat1 = re.compile('[a-z]+') # 한단어 이상의 영어
pat2 = re.compile("\d{3}") # 세자리로 이루어진 숫자

옵션

  • re.DOTALL - 개행문자를 포함하여 모든 문자와 매치
  • re.I - 대소문자에 관계없이 매치될 수 있도록 함
  • re.MULTILINE - 여러줄과 매치할 수 있음

컴파일 된 패턴의 객체 검색 메소드

  • match() - 문자열의 처음부터 정규식과 매치되는지 조사한다. (전체가 가지고 있어야함)
  • search() - 문자열 전체를 검색하여 정규식과 매치되는지 조사한다. (일부분이라도 match 되도 됨)
  • findall() - 정규식과 매치되는 모든 문자열을 리스트로 돌려준다. (정규식과 매치되는 리스트 반환)
  • finditer() - 정규식과 매치되는 모든 문자열을 리스트로 돌려준다. (정규식과 매치되는 반복가능한 객체 반환)

match, search는 정규식과 매치될 때는 match 객체를 돌려주고, 매치되지 않을 떄는 None을 돌려준다.

import re

p = re.compile('[a-z]+')
m = p.match("python hello world 12word deram!!!")
print(m)
m = p.match("123 4214123 1421341234!!!!")
print(m)

pat = re.compile("\d{3}")
res = pat.search("drea dee 12 123")
print(res)

'''
출력값
<re.Match object; span=(0, 6), match='python'>
None
<re.Match object; span=(12, 15), match='123'>
'''

findall, finditer

import re

p = re.compile('[a-z]+')
m = p.findall("python hello world 12word deram!!!")
print(m)
m = p.findall("123 4214123 1421341234!!!!")
print(m)

pat = re.compile("\d{3}")
res = pat.findall("drea dee 12 123")
print(res)

'''
출력값
['python', 'hello', 'world', 'word', 'deram']
[]
['123']
'''

import re

p = re.compile('[a-z]+')
f = p.finditer("python hello world 12word deram!!!")

# print(dir(re.Match)) # Match 클래스의 메소드들
for find in f:
    print(find, end=' ')
    print(find.span()) # 범위값을 알 수 있다

'''
출력값
<re.Match object; span=(0, 6), match='python'> (0, 6)
<re.Match object; span=(7, 12), match='hello'> (7, 12)
<re.Match object; span=(13, 18), match='world'> (13, 18)
<re.Match object; span=(21, 25), match='word'> (21, 25)
<re.Match object; span=(26, 31), match='deram'> (26, 31)
'''

문자열 메타 문자

  • | - or
  • ^ - 문자열의 맨 처음과 일치
  • $ - 문자열의 맨 끝과 일치

grouping

  • 정규식에 ()+로 표현한다
  • match 객체의 group 메서드를 사용하여 그루핑된 부분의 문자열만 뽑아낼 수 있다.
p = re.compile(r'(\w+)\s+(\d+[-]+\d+[-]\d+)')
res = p.search("leehyundong 010-1234-4321")
print(res.group(1))
print(res.group(2))

'''
출력값
leehyundong
010-1234-4321

'''

정규 표현식 활용(이메일)

p = re.compile(r"[a-zA-Z0-9_-]+@[a-z]+.[a-zA-Z]+$")
s1 = "easttwave@gmail.com"
s2 = "e123123!!!@gmail.com"
s3 = "e123123@gmail.com123"

res = p.match(s1)
print(res)
res = p.match(s2)
print(res)
res = p.match(s3)
print(res)

'''
<re.Match object; span=(0, 19), match='easttwave@gmail.com'>
None
None
'''

문자열 치환

s = "korean american italian"
res = re.sub('n', '', s)
print(res)

'''
korea america italia
'''

0개의 댓글