.
& 물음표?
정규표현식에서 말하는 탐욕스럽다(greedy)
: 문자를 집어 삼킨다
마침표는 모든 문자를 다 의미하기 때문에 반복하면 모든 문자를 집어삼키는 특성이 있다
'저는 91년에 태어났습니다. 97년에는 IMF가 있었습니다. 지금은 2020년입니다.' 라는 문장에서 연도만 따로 추출하는 정규표현식
원하는 결과 : '91년', '97년', '2020년' 세 개의 값을 가진 리스트 반환
문장 맨 앞의 숫자부터 ~ 맨 뒤의 '년' 사이 모든 문자를 집어 삼킴
# 먼저 example1이라는 객체에 간단한 문장을 입력한다
>>> example1 = '저는 91년에 태어났습니다. 97년에는 IMF가 있었습니다. 지금은 2020년입니다.'
# 숫자(\d)로 시작하고, 어떤 문자던(.) 반복(+)되며, '년'으로 끝나는 문자열을 반환하려고 명령한다
>>> re.findall(r'\d.+년', example1)
# 문장 맨 앞의 숫자부터 맨 뒤의 '년' 사이 모든 문자를 반환한다
['91년에 태어났습니다. 97년에는 IMF가 있었습니다. 지금은 2020년']
# '년'이라는 글자를 찾으면 패턴 찾기를 멈춘다
>>> re.findall(r'\d.+?년', example1)
['91년', '97년', '2020년']
# 숫자를 반복시킨 후 '년'으로 끝나는 문자를 찾아도 된다
>>> re.findall(r'\d.+년', example1)
['91년', '97년', '2020년']
예시1처럼 .+
명령어를 탐욕스럽게 인식해서
>> example = '이동민 교수는 다음과 같이 설명했습니다(이동민, 2019).
그런데 다른 학자는 이 문제에 대해서 다른 견해를 가지고 있었습니다(최재영, 2019).
또 다른 견해도 있었습니다(Lion, 2018).'
# 앞에 \ 를 붙이지 않으면 문자로 인식되지 않으니 주의!!
>>> result = re.findall(r'\(.+\)', example)
>>> result
['(이동민, 2019).
그런데 다른 학자는 이 문제에 대해서 다른 견해를 가지고 있었습니다(최재영, 2019).
또 다른 견해도 있었습니다(Lion, 2018)']
닫는 괄호 앞에 ?
를 달아줘서 제대로 검색되도록 한다
>>> result = re.findall(r'\(.+?\)', example)
>>> result
['(이동민, 2019)', '(최재영, 2019)', '(Lion, 2018)']