정규식(Regular Expression)
특정 단어나 패턴을 표현하는 축약된 형식으로, 규칙이 있는 문자열을 비교, 추출할때 사용한다.
크롤링이나 스크래핑 시에 필요한 정보를 가져올때 유용하게 사용한다.
예를 들어,
주민등록번호 : 95xxxx-xxxxxxx
이메일 주소 : tistory@gmail.com
차량 번호 : 123가 1234
IP 주소 : 192-111.0.1
등이 있다.
1. 정규식 형태를 가진 문자열을 정규식 객체로 컴파일한다.
import re
p = re.compile("ca.e")
위의 코드는 ca?e와 관련된 문자열을 찾기위한 첫 시작이다. 즉, 정규식을 정의하는 단계이다.
ca?e는 care, case, cafe, cave 등이 될 수 있다.
정규식
. : (ca.e) : 하나의 문자를 의미 > care, cafe, case (O) | caffe (X)
^ : (^de) : 문자열의 시작 > desk, destination (O) | fade (X)
$ : (se$) : 문자열의 끝 > case, base (O) | face (X)
* : 앞의 문자가 0번 혹은 여러 번 반복될 수 있음
*? : 앞의 문자가 0번 혹은 여러 번 반복될 수 있음을 의미(비탐욕)
+ : 앞의 문자가 1번 이상 나타남을 의미
+ : 앞의 문자가 1번 이상 나타남을 의미(비탐욕)
2. 주어진 문자열이 일치하는지 확인
m = p.match("caseless") # match : 주어진 문자열의 처음부터 일치하는지 확인
p.match()는 찾고자하는 문자열이 반드시 가장 앞에 와야한다. 'caseless'인 경우 case를 찾을 수 있지만
good care'인 경우 찾지 못한다.
m = p.search("good care cafe") # search : 주어진 문자열 중에 일치하는 게 있는지 확인
p.search()는 주어진 문자열을 모두 스캔하여 일치하는지 확인한다. p.match()와 달리 care를 찾아낼 수 있으며, 문자열 하나만을 찾기때문에 cafe는 찾지 못한다.
lst = p.findall("good care cafe") # findall : 일치하는 모든 문자열을 리스트 형태로 반환
p.findall()은 주어진 문자열에서 일치하는 모든 문자열은 찾아서 리스트로 반환한다. care와 cafe를 모두 찾을 수 있다.
['care', 'cafe']
3. 결과 반환
print("m.group():", m.group()) # 일치하는 문자열 반환
print("m.string:", m.string) # 입력받은 문자열 반환
print("m.start():", m.start()) # 일치하는 문자열의 시작 index
print("m.end():", m.end()) # 일치하는 문자열의 끝 index
print("m.span():", m.span()) # 일치하는 문자열의 시작 / 끝 index
전체 코드
import re
p = re.compile("ca.e")
def print_match(m):
if m:
print("m.group():", m.group()) # 일치하는 문자열 반환
print("m.string:", m.string) # 입력받은 문자열 반환
print("m.start():", m.start()) # 일치하는 문자열의 시작 index
print("m.end():", m.end()) # 일치하는 문자열의 끝 index
print("m.span():", m.span()) # 일치하는 문자열의 시작 / 끝 index
else:
print("매칭되지 않음") # 매칭되지 않으면 에러 발생
# m = p.match("caseless") # match : 주어진 문자열의 처음부터 일치하는지 확인
# print_match(m)
m = p.search("good care cafe") # search : 주어진 문자열 중에 일치하는 게 있는지 확인
print_match(m)
# lst = p.findall("good care cafe") # findall : 일치하는 모든 문자열을 리스트 형태로 반환
# print(lst)
# 1. p = re.compile("원하는 형태")
# 2. m = p.match("비교할 문자열") # match : 주어진 문자열의 처음부터 일치하는지 확인
# 3. m = p.search("비교할 문자열") # search : 주어진 문자열 중에 일치하는 게 있는지 확인
# 4. lst = p.findall("비교할 문자열") # findall : 일치하는 모든 문자열을 리스트 형태로 반환
# 원하는 형태 : 정규식
# . : (ca.e) : 하나의 문자를 의미 > care, cafe, case (O) | caffe (X)
# ^ : (^de) : 문자열의 시작 > desk, destination (O) | fade (X)
# $ : (se$) : 문자열의 끝 > case, base (O) | face (X)
학습에 도움되는 사이트
https://www.w3schools.com/python/python_regex.asp
https://docs.python.org/ko/3/library/re.html
'Software > Python' 카테고리의 다른 글
[웹스크래핑] Beautifulsoup4 기본 (0) | 2023.01.15 |
---|---|
[웹스크래핑] User Agent - 나를 차단한 웹페이지 접속하기 (0) | 2023.01.15 |
[웹스크래핑] Requests 라이브러리 기초 (0) | 2023.01.14 |
[웹스크래핑] 웹크롤링 vs. 웹스크래핑 (0) | 2023.01.13 |
[Pycharm] 파이참(PyCharm) 단축키 (0) | 2023.01.03 |
댓글