정규 표현식(regular expression, regex): 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.
이때 . ^ $ * + ? { } \ | ( )
와 같이 그 문자가 가진 뜻이 아닌 특별한 용도로 사요하는 문자를 메타 문자(meta characters)
라고 한다.
gray|grey
는 "gray" 또는 "grey"와 일치한다.gray|grey
와 gr(a|e)y
는 "gray"나 "grey" 집합을 둘 다 기술하는 동일 패턴이다.?
: 물음표는 0번 또는 1차례까지의 발생을 의미한다. 이를테면 colou?r
는 "color"와 "colour"를 둘 다 일치시킨다.``별표는 0번 이상의 발생을 의미한다. 이를테면 ab*c
는 "ac", "abc", "abbc", "abbbc" 등을 일치시킨다.+
: 덧셈 기호는 1번 이상의 발생을 의미한다. 이를테면 ab+c
는 "abc", "abbc", "abbbc" 등을 일치시키지만 "ac"는 일치시키지 않는다.{n}
: 정확히 n 번만큼 일치시킨다.{min,}
: "min"번 이상만큼 일치시킨다.{min,max}
: 적어도 "min"번만큼 일치시키지만 "max"번을 초과하여 일치시키지는 않는다.[]
: [abc]라면 abc중 적어도 한개의 문자가 있으면 일치 시킨다.-
: 하이픈(-) 은 범위(from-to)를 의미한다. ex) [a-zA-z] : 알파벳 모두, [0-9] : 숫자 모두.
: \n (줄바꿈) 을 제외한 모든 문자와 일치*
: 앞에 있는 문자가 0부터 무한대로 반복가능 ex) ca*t : caaat, ct 일치\d
- 숫자와 매치, [0-9]와 동일한 표현식이다.\D
- 숫자가 아닌 것과 매치, [^0-9]
와 동일한 표현식이다.\s
- whitespace 문자와 매치, [ \t\n\r\f\v]
와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.\S
- whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]
와 동일한 표현식이다.\w
- 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]
와 동일한 표현식이다.\W
- 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]
와 동일한 표현식이다.>>> import re
>>> p = re.compile('[a-z]+') # 해당 정규식으로 컴파일
# match
>>> print(p.match('abc'))
>>> <re.Match object; span=(0, 3), match='abc'>
>>> print(p.match('1'))
>>> None
# findall
>>> print(p.findall('abc efg ijk'))
>>> ['abc', 'efg', 'ijk']
>>> print(p.findall('123'))
>>> []
# finditer
>>> print(p.finditer('abc efg'))
<callable_iterator object at 0x7f4a644bbe20>
>>> for i in e:
print(i)
>>> <re.Match object; span=(0, 3), match='abc'>
>>> <re.Match object; span=(4, 7), match='efg'>
정규표현식 테스트하기 좋은 사이트