파이썬, re 기능과 정규식 예제

 

글. 수알치 오상문

 

*: 바로 앞 문자, 하위 표현식이 0번 이상 반복
+: 바로 앞 문자, 하위 표현식이 1번 이상 반복
[] : 안에 있는 문자 중 하나가 나타남
() : 평가 우선순위 묶음
. : 1 문자
^ : 바로 뒤에 있는 문자가 (하위 표현식이 제일 앞에 나타남)
$ : 바로 앞에 있는 문자가 (하위 표현식이 제일 뒤에 나타남)
{m} : 바로 앞에 있는 문자가 m회 나타남
{m,n} : 바로 앞에 있는 문자가 m번 이상, n번 이하 나타남
| : | 표기로 분리된 문자, 문자열, 표현식 중 하나가 나타남
[^] : 안에 나타난 문자를 제외한 문자가 나타남

[0-9] : 숫자 == \d
[^0-9] : 숫자 아닌 문자 == \D
[a-z] : 소문자 
[A-Z] : 대문자
[a-zA-Z0-9] : 모든 알파벳과 숫자 

\d : 숫자, (r'\d\d\d': 세자리 숫자)
\D : 숫자 아닌 문자 
\s : 공백문자
\S : 공백이 아닌 문자
\w : 알파벳 문자와 숫자
\W : 알파베 문자나 숫자가 아닌 문자 

r'co+w' : c로 시작하고 o가 0회 이상, 끝이 w인 단어 : cw, cow, cooow
r'[0-9]+-[0-0]+ : 숫자-숫자  1-2, 12-1, 123-456
r'(010|016)-[0-9]{4}-[0-9]{4}' : 010-1234-5678


re 객체 함수
-------------------------------------------------------------
compile : 정규식 객체 생성 후 반환
  r = re.compile(r'[0-9]{3}')
  m = r.search(text)
  print(m)
search() : text 내용에 찾는 대상이 포함되었는지 검사 
match() : text 시작 기준으로 찾기
findall() : 목록(list) 받기
sub() : 찾은 대상으로 교체하기
group() : 일치 결과를 그룹별로 분리
groups() : 그룹 분리된 결과를 튜플로 반환 


# 정규식 예제
import re

text = "안녕하세요, 대한민국은 아름답습니다. 123, abc, 123-abc"

m = re.search(r'123', text)  
if m != None:
  print('찾는 값:', m.group())
  start = m.start()
  end = m.end()
  print(f'찾았습니다. 시작 인덱스:{start}, 끝 이후 인덱스:{end}')
  print('찾은 값:', text[start:end])
else:
  print('찾을 수 없습니다.')
print('-'*40)

m = re.search(r'[0-9]{3}', text)
if m != None:
  print('찾는 값:', m.group())  # 찾는 값
  start = m.start()
  end = m.end()
  print(f'찾았습니다. 시작 인덱스:{start}, 끝 이후 인덱스:{end}')
  print('찾은 값:', text[start:end])
else:
  print('찾을 수 없습니다.')
print('-'*40)

# 전화번호 확인 및 그룹 처리하기 
m = re.search(r'(010|016)-([0-9]{4})-([0-9]{4})', '전화: 010-1234-5678')
if m != None:
  print('찾는 값:', m.group())  # 찾는 값: 010-1234-5678
  print(m.group(0))  # 010-1234-5678
  print(m.group(1))  # 010
  print(m.group(2))  # 1234
  print(m.group(3))  # 5678
  print(f'찾았습니다. 시작 인덱스:{start}, 끝 이후 인덱스:{end}')
else:
  print('찾을 수 없습니다.')
print('-'*40)

반응형

+ Recent posts