정규 표현식의 규칙에 대해 간단히 요약한 내용입니다. 앞으로 이 내용에 대해 예제와 함께 차근차근 설명을 드리도록 하겠습니다.
^ 라인의 처음을 매칭
$ 라인의 끝을 매칭
. 임의의 문자를 매칭 (와일드 카드)
\s 공백 문자를 매칭
\S 공백이 아닌 문자를 매칭
바로 앞선 문자에 적용되고 0 혹은 그 이상의 앞선 문자와 매칭을 표기함.
*? 바로 앞선 문자에 적용되고 0 혹은 그 이상의 앞선 문자와 매칭을 탐욕적이지 않은 방식으로 표기함.
바로 앞선 문자에 적용되고 1 혹은 그 이상의 앞선 문자와 매칭을 표기함
+? 바로 앞선 문자에 적용되고 1 혹은 그 이상의 앞선 문자와 매칭을 탐욕적이지 않은 방식으로 표기함.
[aeiou] 명세된 집합 문자에 존재하는 단일 문자와 매칭. “a”, “e”, “i”, “o”, “u” 문자만 매칭되는 예제
[a-z0-9] - 기호로 문자 범위를 명세할 수 있다. 소문자이거나 숫자인 단일 문자만 매칭되는 예제.
( ) 괄호가 정규표현식에 추가될 때, 매칭을 무시한다. 하지만 findall()을 사용 할 때 전체 문자열보다 매칭된 문자열의 상세한 부속 문자열을 추출할 수 있게 한다.
다음 코드는 mbox-short.txt 파일에서 'From:'이라는 문자 패턴이 포함된 문장을 찾아 출력하는 프로그램입니다. 여기에서는 find() 메소드를 사용했습니다.
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if line.find('From:') >= 0:
print(line)
같은 프로그램을 정규표현식을 활용해 작성하면 다음과 같습니다.
정규표현식을 사용하기 위해서는 re(regular expression) 모듈을 import 해야 하고, re.search()가 find() 메소드와 같은 역할을 해주는 부분입니다.
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if re.search('From:', line) :
print(line)
이번에는 'From:'으로 시작하는 문장을 출력하는 프로그램입니다.
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if line.startswith('From:') :
print(line)
그리고 이것을 정규표현식으로 표현하려면 다음과 같이 '^'라는 특수 문자를 사용하면 됩니다.
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if re.search('^From:', line) :
print(line)
방금 보신 것처럼 정규 표현식에서는 특수 문자를 사용할 수 있습니다. 그리고 방금 보셨던 '^'(캐럿 문자) 외에도 다음과 같은 다양한 특수 문자들이 있습니다.
^ : 문장의 시작을 의미
. : 어떤 문자 한 글자
\S : 공백 문자가 아닌 한 개의 문자
(\는 역슬래시와 같은 문자임)
따라서, 다음과 같은 문자열들은 모두 '^X.* :'라는 패턴을 통해 찾을 수 있습니다.
X-Sieve: CMU Sieve 2.3
X-DSPAM-Result: Innocent
X-DSPAM-Confidence: 0.8475
X-Content-Type-Message-Body: text/plain
그리고 다음과 같은 문자열들은 '^X-\S+:' 패턴으로 찾을 수 있으며,
X-Sieve: CMU Sieve 2.3
X-DSPAM-Result: Innocent
다음의 문자열은 'X-'와 ':' 사이에 공백 문자가 아닌 문자가 포함되지 않았기 때문에 '^X-\S+:' 패턴으로 찾을 수 없습니다.
X-: Very short
X-Plane is behind schedule: two weeks