참고 문헌

  1. Python Docs : Regular Expression HOWTO
  2. 점프투파이썬 : 08장 정규표현식



정규표현식

복잡한 문자열을 처리할 때 사용하는 기법 파이썬만의 고유 문법이 아니라 문자열을 처리하는 모든 곳에서 사용하는 일종의 형식 언어


특정한 패턴과 일치하는 문자열를 ‘검색, ‘치환’, ‘제거’하는 기능을 정규 표현식을 통해 가능하게 됨

정규표현식의 도움없이 패턴을 찾는 작업(Rule 기반)은 작업의 공수가 많음

  • 이메일 형식 판별, 전화번호 형식 판별, 숫자로만 이루어진 문자열 등


보통 패턴을 찾을 때, raw string이 사용되는 경우가 있는데 아래와 같이 문자열 앞에 r을 붙여 사용

>> a = 'abcdef\n'
>> print(a)
abcdef
    
>> b = r'abcdef\n'
>> print(b)
abcdef\n

위와 같이 문자열이 구성된 그대로 문자열을 반환해줌



정리

정규 표현식에서는 아래와 같은 메타 문자들이 존재함

  • 메타 문자는 원래 그 문자가 가진 뜻이 아닌 다른, 특별한 의미를 가진 문자
.^$*+?{}[]\|()

이런 메타 문자를 이용하여 정규표현식을 나타내고 각 메타 문자마다 의미를 가지고 있음


참고로 정규식에서 문자 하나하나를 정확히 명시하고 있으면 그 문자 자체를 의미

  • ‘a’, ‘3’, ‘ㄱ’ 라는 정규 표현식은 각 문자를 의미함
  • ‘test’라는 정규 표현식은 ‘test’라는 문자열 자체를 의미

일반적으로 정규식을 나타낼 때, ^ 은 시작, $ d은 끝, 즉 각각 문자열의 시작과 끝을 의미함

[]

[]로 만들어진 정규식은 괄호 사이 문자들과 매치함을 의미


[125abc] 라는 표현식의 의미는 1, 2, 5, a, b, c, 중 한 개의 문자와 매치를 의미

  • “a” 는 정규식 안에 일치하는 문자인 a가 있으므로 매치
  • “test”는 정규식과 일치하는 문자가 없으므로 매치되지 않음
  • “1st”는 정규식과 일치하는 문자인 1이 있으므로 매치


[]안에 - (하이픈) 이 존재하면 두 문자 사이의 범위를 의미하고 숫자도, 문자도 가능

  • [1-5][12345]과 동일

  • [e-h]는 [efgh]와 동일

특히 아래와 같은 범위를 표현할 때 많이 사용

  • 모든 숫자 : [0-9]
  • 모든 소문자: [a-z]
  • 모든 대문자 : [A-Z]
  • 모든 대,소문자 : [a-zA-Z]


[]안에 사용하는 ^ 문자는 반대라는 의미를 가짐

  • []안에서는 일반적은 ^ 문자와는 다른 의미이기 때문에 주의



자주 사용되는 문자 클래스 (charecter class)

문자 클래스는 특정 집합에 포함된 모든 기호에 일치하는 특별한 표현


\d

숫자들과 매치가 되는 문자

[0-9]와 동일한 표현



\D - 문자 클래스

숫자가 아닌 것들을 의미하고, 그것들과 매치

[^0-9]와 동일

위의 \d 와 반대



\s - 문자 클래스

White space와 매치

[ \t\n\r\f\v] 와 동일하고 맨 앞의 빈칸은 한 칸 띄어쓰기 (space) 의미

  • \t : 탭
  • \n : 줄바꿈
  • \r : return
  • \f : 폼피드, 페이지 구분자
  • \v : 수직 탭



\S - 문자 클래스

White space를 제외한 문자와 매치

[^ \t\n\r\f\v]와 동일

위의 \s 와 반대



\w - 문자 클래스

문자, 숫자, _와 매칭

[a-zA-Z0-9_]와 동일



\W - 문자 클래스

문자, 숫자, _가 아닌 것과 배칭

[^a-zA-Z0-9_] 와 동일



. (dot)

개행 문자 (\n) 를 제외한 모든 문자를 의미

j.h 이라는 정규식은 j와 h 사이에 어떤 문자가 들어가도 매치가 된다는 의미

즉, j2h, jfh 등과는 매치가 되지만 jh2와는 매치가 되지 않음


하지만 []안에 . 이 들어가는 경우는 문자 자체를 의미

j[.]h는 j2h, jfh 과는 매치되지 않고 j.h 라는 문자열과 매칭



*

카테고리:

업데이트: