정규표현식에서 사용하는 메타 문자들 ( 특별한 용도로 사용되는 문자들 )
. ^ * + ? { } [ ] \ | ( _
[ ] 사이의 문자들과 매치
라는 의미
예: 정규표현식이 [abc]
라면 이 표현식의 의미는 'a, b, c, 중 하나의 문자가 존재한다' 는 뜻. 하이픈(-)을 사용하여 범위를 나타낼 수도 있다
not 의 의미를 갖는다
import re
re.match(pattern, string, flags)
pattern
: pattern
string
: pattern 을 찾을 문자열
문자열의 처음부터 패턴이 일치되는 것이 있는 지 확인한다
matchObj = re.match('a','a')
만약 match 된다면 Match object 를 반환하고, match 되지 않는다면 None 을 반환한다.
if matchObj: ...
로 사용할 수 있겠지.
re.search(pattern, string, flags)
문자열의 중간부터라도 패턴과 일치하는 부분이 있는 지를 찾는다.
re.match('a','aba') # object
re.search('a','aba') # object
re.match('a','bab') # None
re.search('a','bab') # None
세번째, 네번째 결과로부터 search 와 match 의 차이를 확인할 수 있다. search 는 문자열 중간부터 패턴이 일치하면 object 를 return 한다.
re.findall(pattern, string, flags)
문자열 중 패턴과 일치되는 모든 부분을 찾는다.
matchObj = re.findall('a','a')
print(matchObj)
print(re.findall('a', 'aba'))
print(re.findall('a', 'bbb'))
print(re.findall('a', 'baa'))
print(re.findall('aaa', 'aaaa'))
결과
['a']
['a', 'a']
[]
['a', 'a']
['aaa']
re.finditer(pattern, string, flags)
re.findall 과 비슷하지만 문자열의 리스트 대신 matchObj 리스트를 반환한다.
re.fullmatch(pattern, string, flags)
패턴과 문자열이 남는 부분 없이 완벽하게 일치하는 지를 검사한다.
matchObj = re.fullmatch('a', 'a')
print(matchObj)
print(re.fullmatch('a', 'aba'))
print(re.fullmatch('a', 'bbb'))
print(re.fullmatch('a', 'baa'))
print(re.fullmatch('aaa', 'aaaa'))
결과
<_sre.SRE_Match object; span=(0, 1), match='a'>
None
None
None
None`
method | Description |
---|---|
group() | 일치된 문자열을 반환 |
start() | 일치된 문자열의 시작 위치를 반환 |
end() | 일치된 문자열의 끝 위치를 반환 |
span() | 일치된 문자열의 (시작, 끝 위치)의 tuple을 반환 |
matchObj = re.search('match', "'matchObj' is a good name, but 'm' is convenient.")
print(matchObj)
print(matchObj.group())
print(matchObj.start())
print(matchObj.end())
print(matchObj.span())
<_sre.SRE_Match object; span=(1, 6), match='match'>
match
1
6
(1, 6)