[ 프로젝트 ] 프로젝트 관련 개념 스터디_1(정규표현식_기본)
- <스토리>
쇼핑몰 의류 추천 시스템을 구현하기 위해서 팀이 선택한 방법은 쇼핑몰의 상품 별 리뷰 데이터를 모아서 구현하는 것입니다. 그러나 우선은 리뷰 데이터 수집, 추천 시스템 구축에 대한 개념이 없기 때문에 보다 구체적인 계획과 역할 분담을 위해서 먼저 스터디를 4주 동안 진행하기로 했습니다. 그래서 가장 먼저 웹 스크래핑에 대한 개념들을 익히기로 했습니다.
<정규식>
정규식은 텍스트에서 특정 글자나 단어, 패턴 등을 정확하고 유동적으로 표현하는 식입니다. 줄여서 regex나 regexp라고도 부르는데 정규식 처리기가 해석할 수 있도록 정해진 문법에 따라 사용하여야 합니다. (http://en.wikipedia.org/wiki/Regular_expression)
한 마디로 수많은 글자 중에서 원하는 글자를 찾을 수 있는 빠른 방법을 말합니다.
1. 정규표현식의 규칙
- ^ 라인의 처음을 매칭
- $ 라인의 끝을 매칭
- . 임의의 문자를 매칭 (와일드 카드) – 아무 문자나 와도 된다.
- \s 공백 문자를 매칭
- \S 공백이 아닌 문자를 매칭
- * 바로 앞선 문자에 적용되고 0 혹은 그 이상의 앞선 문자와 매칭을 표기함.
- *? 바로 앞선 문자에 적용되고 0 혹은 그 이상의 앞선 문자와 매칭을 탐욕적이지 않은 방식으로 표기함.
- + 바로 앞선 문자에 적용되고 1 혹은 그 이상의 앞선 문자와 매칭을 표기함
- +? 바로 앞선 문자에 적용되고 1 혹은 그 이상의 앞선 문자와 매칭을 탐욕적이지 않은 방식으로 표기함.
- [aeiou] 명세된 집합 문자에 존재하는 단일 문자와 매칭. “a”, “e”, “i”, “o”, “u” 문자만 매칭 되는 예제
- [a-z0-9] - 기호로 문자 범위를 명세할 수 있다. 소문자이거나 숫자인 단일 문자만 매칭되는 예제.
- ( ) 괄호가 정규표현식에 추가될 때, 매칭을 무시한다. 하지만 findall()을 사용 할 때 전체 문자열보다 매칭 된 문자열의 상세한 부속 문자열을 추출할 수 있게 한다.
2. 파이썬에서 정규식 사용
파이썬에서 사용하기 위해서는 정규식 모듈을 먼저 임포트해야 합니다.
import re
주요 함수
- re.search() : find() 메서드를 쓴 것처럼 정규식에 매칭 되는 문자열을 찾을 수 있습니다.
- re.findall() : 정규식에 맞는 문자열 추출 가능합니다.
예시(정규식 일반 find() 메서드처럼 써보기)
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if re.search('From:', line):
print(line)
위 예시 같은 경우는 txt 파일에서 From: 이 들어있는 문장을 출력할 수 있습니다.
re.search('^From:',line)
'^'를 이용하면 From:으로 시작하는 문장을 출력할 수 있습니다.
예시
re.search('^X.*')
이렇게 표현하면 X로 시작하면서 X다음에 어떤 문자이든 상관없이 몇 번이든 올 수 있다.라는 의미이고
- X-Sieve: CMU Sieve 2.3
- X-DSPAM-Result: Innocent
- X-DSPAM-Confidence: 0.8475
- X-Content-Type-Message-Body: text/plain
다음과 같은 문자열들을 출력할 수 있습니다.
이렇게 정규식을 활용하면 복잡한 패턴을 가지고 있는 문자열들도 쉽게 접근할 수 있습니다.