본문 바로가기

개발/Python

파이썬 정규식 정리

]

정규식 간단요약

^           라인의 처음을 매칭

$            라인의 끝을 매칭

.             임의의 문자를 매칭 (와일드 카드)

\s          공백 문자를 매칭

\S         공백이 아닌 문자를 매칭

*            바로 앞선 문자에 적용되고 0 혹은 그 이상의 앞선 문자와 매칭을 표기함.

*?          바로 앞선 문자에 적용되고 0 혹은 그 이상의 앞선 문자와 매칭을 탐욕적이지 않은 방식으로 표기함.

+           바로 앞선 문자에 적용되고 1 혹은 그 이상의 앞선 문자와 매칭을 표기함

+?          바로 앞선 문자에 적용되고 1 혹은 그 이상의 앞선 문자와 매칭을 탐욕적이지 않은 방식으로 표기함.

[aeiou]    명세된 집합 문자에 존재하는 단일 문자와 매칭. “a”, “e”, “i”, “o”, “u” 문자만 매칭되는 예제

[a-z0-9]    - 기호로 문자 범위를 명세할 수 있다. 소문자이거나 숫자인 단일 문자만 매칭되는 예제.

( )         괄호가 정규표현식에 추가될 때, 매칭을 무시한다. 하지만 findall()을 사용 할 때 전체 문자열보다 매칭된 문자열의 상세한 부속 문자열을 추출할 수 있게 한다.

 

 

특수 문자를 활용한 문자 패턴 찾기

 정규 표현식에서는 특수 문자를 사용할 수 있습니다. 그리고 방금 보셨던 '^'(캐럿 문자) 외에도 다음과 같은 다양한 특수 문자들이 있습니다.

^ : 문장의 시작을 의미

. : 어떤 문자 한 글자

* : 앞의 문자가 여러 번 반복될 수 있음을 의미

+ : 앞의 문자가 1번 이상 나타남을 의미

\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
import re
x = 'From: Using the : character'
y = re.findall('^F.+?:', x)
print(y)

# ['From:']
x = 'From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008'
y = re.findall('^From (\S+@\S+)',x)
print(y)

# ['stephen.marquard@uct.ac.za']

코드는 다음과 같은 식으로 작성합니다.