- Python - 프로그래밍 시작하기
- Python 기초 (Basics)
- Python 변수 (Variables)
- Python 연산자 (Operators)
- Python 리스트 (List)
- Python 튜플 (Tuple)
- Python 문자열 (Strings)
- Python 집합 (Sets)
- Python 딕셔너리 (Dictionary)
- Python 흐름 제어 (Flow control)
- Python 함수 (Function)
- Python 클래스 (Class)
- Python 내장 함수 (Built-in function)
- Python 키워드 (Keyword)
- Keyword - and
- Keyword - as
- Keyword - assert
- Keyword - break
- Keyword - class
- Keyword - continue
- Keyword - def
- Keyword - del
- Keyword - elif
- Keyword - else
- Keyword - except
- Keyword - False
- Keyword - for
- Keyword - from
- Keyword - global
- Keyword - if
- Keyword - import
- Keyword - in
- Keyword - is
- Keyword - lambda
- Keyword - None
- Keyword - not
- Keyword - or
- Keyword - pass
- Keyword - return
- Keyword - True
- Keyword - try
- Keyword - while
- Python 파일 다루기
- Python datetime 모듈
- Python time 모듈
- Python collections.deque
- Python collections.namedtuple
- Python의 선 (Zen of Python)
- Python Tutorial
- NumPy Tutorial
- Matplotlib Tutorial
- PyQt5 Tutorial
- BeautifulSoup Tutorial
- xlrd/xlwt Tutorial
- Pillow Tutorial
- Googletrans Tutorial
- PyWin32 Tutorial
- PyAutoGUI Tutorial
- Pyperclip Tutorial
- TensorFlow Tutorial
- Tips and Examples
메타문자 (Metacharacters)¶
정규표현식에서 메타문자 (metacharacters)는 특별한 의미를 가집니다.
아래와 같은 다양한 종류의 메타문자가 사용됩니다.
[] . ^ $ \* + ? {} () \\ \|
메타문자의 사용에 대해 예제와 함께 알아봅니다. 순서는 아래와 같습니다.
1. Square brackets - []
¶
[]
는 일치하는 문자들의 집합을 지정하기 위해 사용합니다.
예제¶
import re
pattern = '[abc]'
print(re.findall(pattern, 'a'))
print(re.findall(pattern, 'ab'))
print(re.findall(pattern, 'banana'))
['a']
['a', 'b']
['b', 'a', 'a', 'a']
pattern = ‘[abc]’는 문자 a, b, c의 집합입니다. a, b, c 중 하나라도 일치하면, 일치하는 문자가 됩니다.
re.findall() 함수는 패턴 (pattern)과 일치하는 문자열을 리스트의 형태로 반환합니다.
‘banana’의 경우 순서대로 ‘b’, ‘a’, ‘a’, ‘a’ 네 개의 문자가 일치해서 리스트 [‘b’, ‘a’, ‘a’, ‘a’]를 반환합니다.
더 자세한 내용은 정규표현식 집합 (Sets) 페이지를 참고하세요.
2. Period - .
¶
.
는 모든 하나의 문자와 일치합니다. (새 줄 ‘\n’은 제외)
예제¶
import re
pattern = '.'
pattern2 = '...'
print(re.findall(pattern, 'a'))
print(re.findall(pattern, 'ab'))
print(re.findall(pattern, 'banana'))
print(re.findall(pattern2, 'a'))
print(re.findall(pattern2, 'ab'))
print(re.findall(pattern2, 'banana'))
['a']
['a', 'b']
['b', 'a', 'n', 'a', 'n', 'a']
[]
[]
['ban', 'ana']
pattern = ‘.’는 모든 한 개의 문자와 일치합니다.
따라서 ‘banana’와는 문자 하나하나 일치해서 모든 문자의 리스트 [‘b’, ‘a’, ‘n’, ‘a’, ‘n’, ‘a’]를 출력합니다.
마찬가지로 pattern2 = ‘…’는 세 개 문자와 일치합니다.
re.findall() 함수는 겹치지 않도록 일치 여부를 확인하기 때문에, ‘banana’와는 ‘ban’, ‘ana’와 일치합니다.
3. Caret - ^
¶
^
는 특정한 문자로 시작되는 문자열과 일치합니다.
예제¶
import re
pattern = '^a'
pattern2 = '^car'
print(re.findall(pattern, 'abc'))
print(re.findall(pattern, 'apple'))
print(re.findall(pattern2, 'career'))
print(re.findall(pattern2, 'minicar'))
['a']
['a']
['car']
[]
pattern = ‘^a’ 는 ‘a’로 시작하는 문자열을 확인합니다.
pattern2 = ‘^car’ 는 ‘car’로 시작하는 문자열을 확인합니다.
4. Dollar - $
¶
$
는 특정한 문자로 끝나는 문자열과 일치합니다.
예제¶
import re
pattern = 'c$'
pattern2 = 'car$'
print(re.findall(pattern, 'abc'))
print(re.findall(pattern, 'apple'))
print(re.findall(pattern2, 'career'))
print(re.findall(pattern2, 'minicar'))
['c']
[]
[]
['car']
pattern = ‘c$’ 는 ‘c’로 끝나는 문자열을 확인합니다.
pattern2 = ‘car$’ 는 ‘car’로 끝나는 문자열을 확인합니다.
5. Star - *
¶
*
는 *
의 왼쪽에 위치한 문
자가 없거나 한 번 이상 나타나는 문자열과 일치합니다.
예제¶
import re
pattern = 'ab*'
pattern2 = 'car*'
print(re.findall(pattern, 'abc'))
print(re.findall(pattern, 'apple'))
print(re.findall(pattern2, 'career'))
print(re.findall(pattern2, 'minicar'))
print(re.findall(pattern2, 'cacao'))
['ab']
['a']
['car']
['car']
['ca', 'ca']
pattern = ‘ab*’ 는 ‘a’ 다음 ‘b’가 없거나 (한 번 이상) 나타나는 문자열과 일치합니다. 따라서 ‘apple’에서는 ‘a’와 일치합니다.
pattern2 = ‘car*’ 는 ‘ca’ 다음 ‘r’이 없거나 (한 번 이상) 나타나는 문자열과 일치합니다. 따라서 ‘cacao’에서는 ‘ca’, ‘ca’와 모두 일치합니다.
6. Plus - +
¶
+
는 +
의 왼쪽에 위치한 문자가 한 번 이상 나타나는 문자열과 일치합니다.
예제¶
import re
pattern = 'ab+'
pattern2 = 'car+'
print(re.findall(pattern, 'abc'))
print(re.findall(pattern, 'apple'))
print(re.findall(pattern2, 'career'))
print(re.findall(pattern2, 'minicar'))
print(re.findall(pattern2, 'cacao'))
['ab']
[]
['car']
['car']
[]
pattern = ‘ab+’ 는 ‘a’ 다음 ‘b’가 한 번 이상 나타나는 문자열과 일치합니다. 따라서 ‘apple’에서는 일치하지 않습니다.
pattern2 = ‘car+’ 는 ‘ca’ 다음 ‘r’이 한 번 이상 나타나는 문자열과 일치합니다. 따라서 ‘cacao’에서는 일치하지 않습니다.
7. Question Mark - ?
¶
?
는 ?
의 왼쪽에 위치한 문자가 나타나지 않거나 한 번 나타나는 문자열과 일치합니다.
예제¶
import re
pattern = 'ab?c'
print(re.findall(pattern, 'ac'))
print(re.findall(pattern, 'abc'))
print(re.findall(pattern, 'abbc'))
['ac']
['abc']
[]
pattern = ‘ab?c’ 는 ‘a’와 ‘c’ 사이에 b가 나타나지 않거나 한 번 나타나는 경우와 일치합니다.
따라서 ‘abbc’는 일치하지 않습니다.
8. Braces - {}
¶
{n,m}
는 {n,m}
의 왼쪽에 위치한 문자가 최소 n번, 최대 m번 나타나는 문자열과 일치합니다.
예제¶
import re
pattern = 'ab{1,3}c'
print(re.findall(pattern, 'ac'))
print(re.findall(pattern, 'abc'))
print(re.findall(pattern, 'abbc'))
print(re.findall(pattern, 'abbbc'))
print(re.findall(pattern, 'abbbbc'))
[]
['abc']
['abbc']
['abbbc']
[]
pattern = ‘ab{1,3}c’ 는 ‘a’와 ‘c’ 사이에 ‘b’가 적어도 한 번, 최대 세 번 나타나는 경우와 일치합니다.
따라서 ‘ac’와 ‘abbbbc’는 일치하지 않습니다.
9. Alternation - |
¶
|
는 or 연산자의 동작과 같습니다.
예를 들어, ‘a|b’는 문자 ‘a’ 또는 ‘b’와 일치합니다.
예제¶
import re
pattern = 'color|colour'
print(re.findall(pattern, 'This color is good.'))
print(re.findall(pattern, 'This colour is good.'))
['color']
['colour']
pattern = ‘color|colour’ 는 ‘color’ 또는 ‘colour’와 일치 여부를 확인합니다.
10. Group - ()
¶
()
는 서브패턴을 그룹화하기 위해 사용합니다.
예제¶
import re
pattern = 'col(o|ou)r'
print(re.findall(pattern, 'This color is good.'))
print(re.findall(pattern, 'This colour is good.'))
print(re.findall(pattern, 'This colou is good.'))
['o']
['ou']
[]
pattern = ‘col(o|ou)r’ 은 ‘col’과 ‘r’ 사이에 ‘o’ 또는 ‘ou’가 위치하는 경우와 일치합니다.
‘This colou is good.’는 뒤에 ‘r’이 나타나지 않기 때문에 일치하지 않습니다.
11. Backslash - \
¶
\
는 메타문자를 포함한 다양한 문자를 이스케이프하기 위해 사용합니다.
예를 들어, ‘\$a’는 ‘$a’와 일치하며, ‘$’는 메타문자로 인식되지 않습니다.
예제¶
import re
pattern = '$300'
pattern2 = '\$300'
print(re.findall(pattern, 'The price is $300'))
print(re.findall(pattern2, 'The price is $300'))
[]
['$300']
pattern2 = ‘\$300’과 같이 백슬래시를 사용해서 ‘$300’ 문자열과 일치 여부를 확인할 수 있습니다.