정규 표현식은 문자열에서 특정한 패턴을 찾거나 매칭할 때 사용되는 강력한 도구입니다. Python에서는 re
모듈을 사용하여 정규 표현식을 처리할 수 있습니다. 이번 포스트에서는 Python에서 정규 표현식의 기본 패턴을 알아보겠습니다.
1. 문자열 매칭
정규 표현식을 사용하여 문자열 내에서 특정한 패턴을 찾을 수 있습니다. match()
함수는 문자열의 시작부터 패턴이 일치하는지 확인하고, search()
함수는 문자열 내에서 패턴과 일치하는 부분을 찾습니다.
import re
pattern = r"apple"
text = "I have an apple"
result1 = re.match(pattern, text)
result2 = re.search(pattern, text)
print(result1) # None
print(result2) # <re.Match object; span=(9, 14), match='apple'>
위의 예제에서는 “apple”이라는 패턴을 찾기 위해 match()
함수와 search()
함수를 사용합니다. match()
함수는 문자열의 시작부터 패턴이 일치해야 하므로, “I have an apple”에서는 일치하지 않습니다. 반면 search()
함수는 패턴과 일치하는 부분을 찾을 수 있으므로 결과로 "apple"
이라는 매치 객체를 반환합니다.
2. 메타문자
정규 표현식에서는 특정한 의미를 가지고 있는 메타문자들을 사용할 수 있습니다. 이러한 메타문자들은 패턴 매칭을 더욱 효율적으로 할 수 있도록 도와줍니다.
.
: 임의의 한 문자와 매칭됩니다.^
: 문자열의 시작을 나타내며, 패턴이 문자열의 시작과 일치해야 합니다.$
: 문자열의 끝을 나타내며, 패턴이 문자열의 끝과 일치해야 합니다.[]
: 문자 집합 중 하나와 매칭됩니다.|
: OR 연산을 수행하며, 패턴 중 하나와 일치하면 매칭됩니다.
import re
pattern1 = r"gra.y"
pattern2 = r"^apple"
pattern3 = r"banana$"
pattern4 = r"[aeiou]"
text = "gray apple banana orange"
result1 = re.findall(pattern1, text)
result2 = re.findall(pattern2, text)
result3 = re.findall(pattern3, text)
result4 = re.findall(pattern4, text)
print(result1) # ['gray']
print(result2) # ['apple']
print(result3) # ['banana']
print(result4) # ['a', 'e', 'a', 'a', 'o', 'e']
위의 예제에서는 메타문자들을 사용하여 패턴 매칭을 수행합니다. .
은 임의의 한 문자와 매칭되므로 "gray"
라는 문자열의 패턴을 찾을 수 있습니다. ^
는 패턴이 문자열의 시작과 일치하므로 "apple"
이라는 문자열의 패턴을 찾을 수 있습니다. $
는 패턴이 문자열의 끝과 일치하므로 "banana"
라는 문자열의 패턴을 찾을 수 있습니다. []
는 문자 집합 중 하나와 매칭되므로 모음을 찾을 수 있는 패턴을 생성할 수 있습니다.
3. 반복 메타문자
패턴을 더욱 유연하게 만들기 위해 반복 메타문자를 사용할 수 있습니다.
*
: 이전 패턴이 0번 이상 반복되는 경우와 매칭됩니다.+
: 이전 패턴이 1번 이상 반복되는 경우와 매칭됩니다.?
: 이전 패턴이 0번 또는 1번 등장하는 경우와 매칭됩니다.{n}
: 이전 패턴이 n번 반복되는 경우와 매칭됩니다.{min, max}
: 이전 패턴이 최소 min번, 최대 max번 반복되는 경우와 매칭됩니다.
import re
pattern1 = r"go*gle"
pattern2 = r"go+gle"
pattern3 = r"go?gle"
pattern4 = r"go{2}gle"
pattern5 = r"go{1,3}gle"
text = "ggle google gogle gooogle goooogle"
result1 = re.findall(pattern1, text)
result2 = re.findall(pattern2, text)
result3 = re.findall(pattern3, text)
result4 = re.findall(pattern4, text)
result5 = re.findall(pattern5, text)
print(result1) # ['ggle', 'google', 'gogle', 'gooogle', 'gooooogle']
print(result2) # ['google', 'gooogle', 'gooooogle']
print(result3) # ['ggle', 'google']
print(result4) # ['gogle']
print(result5) # ['google', 'gogle', 'google']
위의 예제에서는 반복 메타문자를 사용하여 패턴을 더욱 유연하게 만듭니다. *
는 이전 패턴이 0번 이상 반복되는 경우와 매칭되므로 "ggle", "google", "gogle", "gooogle", "gooooogle"
이라는 패턴을 찾을 수 있습니다. +
는 이전 패턴이 1번 이상 반복되는 경우와 매칭되므로 "google", "gooogle", "gooooogle"
이라는 패턴을 찾을 수 있습니다. ?
는 이전 패턴이 0번 또는 1번 등장하는 경우와 매칭되므로 "ggle", "google"
이라는 패턴을 찾을 수 있습니다. {n}
는 이전 패턴이 n번 반복되는 경우와 매칭되므로 "gogle"
이라는 패턴을 찾을 수 있습니다. {min, max}
는 이전 패턴이 최소 min번, 최대 max번 반복되는 경우와 매칭되므로 "google", "gogle", "google"
이라는 패턴을 찾을 수 있습니다.
정규 표현식은 복잡한 문자열 처리 작업에서 매우 유용한 도구입니다. 이번 포스트에서는 Python에서 정규 표현식의 기본 패턴을 알아보았습니다. 자세한 내용은 Python 공식 문서나 다양한 강의와 자료들을 참고해보시기 바랍니다.