정규 표현식

김가영·2021년 2월 12일
0

AlgorithmStudy

목록 보기
14/14
post-thumbnail

점프 투 파이썬 07-2 정규 표현식 시작하기 참고

문법

정규표현식에서 사용하는 메타 문자들 ( 특별한 용도로 사용되는 문자들 )
. ^ * + ? { } [ ] \ | ( _

문자클래스 []

[ ] 사이의 문자들과 매치 라는 의미

예: 정규표현식이 [abc] 라면 이 표현식의 의미는 'a, b, c, 중 하나의 문자가 존재한다' 는 뜻. 하이픈(-)을 사용하여 범위를 나타낼 수도 있다

  • [a-zA-Z] : 알파벳 모두
  • [0-9] : 숫자

^

not 의 의미를 갖는다

  • [^0-9] : 숫자가 아닌 것과 매치

파이썬 정규표현식 : re 모듈

import re

match

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 한다.

findall

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']

finditer

re.finditer(pattern, string, flags)
re.findall 과 비슷하지만 문자열의 리스트 대신 matchObj 리스트를 반환한다.

fullmatch

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`

match Object 의 메서드들

methodDescription
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)
profile
개발블로그

0개의 댓글