[파이썬 초급] 11) 정규 표현식

파이썬에서는 문자열을 처리하는 다양한 방법이 있지만, 그 중에서도 가장 강력하면서도 복잡한 도구 중 하나가 바로 정규 표현식(Regular Expression)입니다. 이번 강좌에서는 정규 표현식의 기본 개념과 사용법에 대해 알아볼 예정입니다.

1. 정규 표현식이란?

정규 표현식은 문자열을 처리하는 방법 중 하나로, 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어입니다. 이 규칙을 사용하여 문자열 검색, 분리, 대체 등 다양한 작업을 수행할 수 있습니다.

2. 파이썬에서의 정규 표현식

파이썬에서는 ‘re’라는 모듈을 통해 정규 표현식을 사용할 수 있습니다. 이를 사용하기 위해서는 먼저 아래와 같이 모듈을 import 해야 합니다.

import re

이제 기본적인 정규 표현식에 대해 알아봅시다.

3. 기본적인 정규 표현식 패턴

정규 표현식에서 사용되는 기본적인 패턴들은 다음과 같습니다.

  • . : 모든 문자를 의미
  • * : 앞의 문자가 0회 이상 반복
  • + : 앞의 문자가 1회 이상 반복
  • ? : 앞의 문자가 있을 수도, 없을 수도 있음(0회 또는 1회)
  • {m} : 앞의 문자가 m회 반복
  • {m,n} : 앞의 문자가 m회 이상, n회 이하 반복
  • [abc] : a, b, c 중 한 개의 문자와 일치
  • (abc|def) : abc 또는 def와 일치

예를 들어, ‘a+’는 ‘a’가 한 번 이상 반복되는 문자열을 의미하며, ‘a{3,5}’는 ‘a’가 3회에서 5회 반복되는 문자열을 의미합니다.

import re

print(re.match('a+', 'aaaa'))  # <re.Match object; span=(0, 4), match='aaaa'>
print(re.match('a{3,5}', 'aaaaa'))  # <re.Match object; span=(0, 5), match='aaaaa'>

위의 예에서 ‘re.match’ 함수는 문자열의 처음부터 정규식과 매치되는지 조사합니다. ‘a+’와 ‘a{3,5}’ 모두 매치되므로 각각 ‘aaaa’와 ‘aaaaa’가 출력됩니다.

4. 문자 클래스

문자 클래스는 [ ] 사이의 문자들과 매치를 의미합니다.

  • [abc] : a, b, c 중 한 개의 문자와 일치
  • [a-z] : a부터 z까지의 알파벳 중 한 개의 문자와 일치
  • [0-9] : 0부터 9까지의 숫자 중 한 개와 일치
print(re.match('[0-9]', '1234'))  # <re.Match object; span=(0, 1), match='1'>
print(re.match('[0-9]+', '1234'))  # <re.Match object; span=(0, 4), match='1234'>

위의 예에서 ‘[0-9]’는 숫자 한 개와 매치되므로 ‘1’이 출력되며, ‘[0-9]+’는 숫자가 한 개 이상 연속으로 반복되는 문자열과 매치되므로 ‘1234’가 출력됩니다.

5. 특수 문자 클래스

  • \d : 숫자와 매치, [0-9]와 동일
  • \D : 숫자가 아닌 것과 매치, [^0-9]와 동일
  • \s : whitespace 문자와 매치
  • \S : whitespace 문자가 아닌 것과 매치
  • \w : 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일
  • \W : 문자+숫자가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일

6. 정규 표현식 함수들

  • match() : 문자열의 처음부터 정규식과 매치되는지 조사
  • search() : 문자열 전체를 검색하여 정규식과 매치되는지 조사
  • findall() : 정규식과 매치되는 모든 문자열을 리스트로 반환
  • finditer() : 정규식과 매치되는 모든 문자열을 반복 가능한 객체로 반환
  • sub() : 정규식과 매치되는 부분을 다른 문자로 바꿈

7. 정규 표현식 예제

아래는 간단한 이메일 형식을 검사하는 정규 표현식입니다.

import re

email = 'test@gmail.com'
if re.match('[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9.]+', email):
    print('유효한 이메일 주소입니다.')
else:
    print('유효하지 않은 이메일 주소입니다.')

위의 코드는 문자 또는 숫자로 시작하고, ‘@’ 문자가 오며, 그 다음에 다시 문자 또는 숫자가 오고, ‘.’ 문자가 오는 이메일 주소를 검사합니다.

이렇게 정규 표현식을 이용하면 복잡한 문자열 처리 작업을 쉽고 효율적으로 수행할 수 있습니다.

정규 표현식은 매우 강력한 도구이지만, 복잡하고 어려울 수 있습니다. 그러나 연습을 통해 익혀두면 문자열을 처리하는 데 매우 유용하게 사용할 수 있습니다.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top