Programing Language/Python

[나도 코딩] 웹 스크래핑 5. 정규식 기본 1

Data-SSung 2020. 11. 4. 18:14
반응형

웹 스크래핑

정규식 기본


이 글은 나도코딩님의 [파이썬 코딩 무료 강의 (활용편3)]을 보고 공부한 내용입니다. 

1. 정규식 이해하기

정규식(regular expression)이란?

  • 정해진 형태를 의미
  • 약어로 re라고 함
  • ex1) 주민등록번호의 정규식: 앞 숫자 6 - 뒤 숫자 7
    • 111111-0300303 (O) -> 올바른 정규식
    • dfdfdf-dofiudo (X) -> 올바르지 않은 정규식
  • ex) gmail 이메일 주소 정규식: id@gmail.com
    • datassung18@gmail.cpm (O) -> 올바른 정규식
    • dfdfdf@dfdfdfs@gmailcom (X) -> 올바르지 않은 정규식

 

2. 정규식 실습

  • 특정한 패턴의 정규식을 찾을 때 활용함

 

정규식 기본 문법

  • compile : 정규식을 특정 문자열에 담을 때 사용하는 함수
  • match : 주어진 문자열의 처음부터 일치하는지 매칭하는 함수

. (ca.e)

하나의 문자를 의미

ex) care, cafe, case (O) vs caffe (X)

^ (^de)

문자열의 시작을 의미

ex) desk, dear, destinaton (O)
vs fade (X)

$ (se$)

문자열의 끝을 의미

ex) case, base (O) vs face (X)

 

정규식 기본 실습

  • Ex) 차가 사람을 치고 도망갔음. 나는 경찰에 신고하면서 도망가는 차 번호를 외웠음. 
        경찰에서 목격자 진술을 할 때, 차량 번호를 말하려는데 
    차량 번호가 다 기억나지 않음.
    • 차량번호 정규식: ascd, nkok, dfds
    • 내가 기억하는 차량번호: ca?e
    • 경찰은 정규식 활용

Step 1. 정규식을 P에 담기

# 정규식 표현식의 re 모듈 불러오기
import re

# 정규식을 p에 담기
p = re.compile("ca.e") # 하나의 문자를 찾기

Step2. 정규식(p)을 주어진 식(m)과 매칭하고 확인하기

  • ca.e(정규식)과 주어진 식(care)이 매칭이 되므로 care 출력!
## 매칭되는 경우
# 정규식에 주어진 식 매칭하기
m = p.match("care")

# 결과 보기!
print(m.group()) # care 출력! 
  • ca.e(정규식)과 주어진 식(caffe)이 매칭이 되지 않으므로 에러 발생!
## 매칭되지 않는 경우
# 정규식에 주어진 식을 매칭하기
m = p.match("caffe")

# 결과 보기!
print(m.group()) # 에러 발생!

 

매칭결과 

매칭 O (정규식(p)이 주어진 식(m)과 매치가 됨)

주어진 식(p) 출력

매칭 X (정규식(p)이 주어진 식(m)과 매치가 되지 않음)

에러 발생

 

 

정규식 활용해보기

  • 매칭여부 함수 만들어 활용하기
# 정규식 매칭 여부를 함수로 만들기
import re
def print_match(m):
	if m:
    	print(m.group())
    else:
    	print("매칭되지 않습니다.")        
  • case1
    • 매칭 되는 경우 -> cabe 출력!
p = re.compile("ca.e") 
m = p.match("cabe")
print_match(m)

 

  •  case2
    • 매칭 안 되는 경우 -> 매칭 되지 않습니다. 출력!
p = re.compile("ca.e")
m = p.match("cat")
print_match(m) 

 

  •  case3
    • 매칭 안 되는 경우 -> 매칭되지 않습니다. 출력!
p = re.compile("ca.e")
m = p.match("good care")
print_match(m)

 

  • case4
    • 매칭 되는 경우 -> care 출력!
    • ca.e까지는 앞에서부터는 일치하기 때문에, 그 이후의 문자열의 형태는 상관이 없음
p = re.compile("ca.e")
m = p.match("careless")
print_match(m)

case 1,2,3,4 결과

 

 

이 글은 나도코딩님의 [파이썬 코딩 무료 강의 (활용편3)]을 보고 공부한 내용입니다. 

 

반응형