파이썬에서는 문자열을 처리하는 다양한 방법이 있지만, 그 중에서도 가장 강력하면서도 복잡한 도구 중 하나가 바로 정규 표현식(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('유효하지 않은 이메일 주소입니다.')
위의 코드는 문자 또는 숫자로 시작하고, ‘@’ 문자가 오며, 그 다음에 다시 문자 또는 숫자가 오고, ‘.’ 문자가 오는 이메일 주소를 검사합니다.
이렇게 정규 표현식을 이용하면 복잡한 문자열 처리 작업을 쉽고 효율적으로 수행할 수 있습니다.
정규 표현식은 매우 강력한 도구이지만, 복잡하고 어려울 수 있습니다. 그러나 연습을 통해 익혀두면 문자열을 처리하는 데 매우 유용하게 사용할 수 있습니다.