<aside> 💬 lv0, 정규표현식

날짜 패턴 찾기

문제 설명

주어진 문자열에서 날짜 형식(YYYY-MM-DD)을 찾고, 연도, 월, 일을 각각 그룹으로 추출하는 함수를 작성해주세요. 문자열은 여러 날짜 형식을 포함할 수 있으며, 각 날짜의 연도, 월, 일을 튜플 형태로 리스트에 담아 반환합니다.

예를 들어, 문자열 "2024-01-20에 약속이 하나 있고 다른 약속은 2023-12-31이야!" 문장에서 함수는 [(2024, 01, 20), (2023, 12, 31)]을 반환해야 합니다.


제한 사항


입출력 예

입력 (문자열) 출력 (날짜의 연도, 월, 일 튜플 리스트)
"The event will happen on 2024-01-20." [(2024, 01, 20)]
"Dates: 2023-12-31, 2024-01-01, and 2024-02-28." [(2023, 12, 31), (2024, 01, 01), (2024, 02, 28)]
"No dates here." []

입출력 설명

첫 번째 예시에서 문자열은 "2024-01-20"이라는 날짜를 포함합니다. 두 번째 예시에서 문자열은 세 개의 날짜를 포함합니다. 세 번째 예시에서는 유효한 날짜가 없으므로 빈 리스트를 반환합니다.

</aside>

😺 풀이 1. findall

import re

def solution(data):
    pattern = r"(\\d{4})-(\\d{2})-(\\d{2})" **#1 정규표현식 패턴 정의**
    matches = re.findall(pattern, data) **#2 findall 함수 사용**
    return [(int(year), int(month), int(day)) for year, month, day in matches]
    **#3 결과 반환**

단계별 풀이 전략

  1. 정규표현식 패턴 정의

    정규표현식을 사용하여 날짜 패턴을 찾아내고, 이를 기반으로 날짜를 추출합니다.

  2. findall 함수 사용

    주어진 패턴과 일치하는 모든 문자열을 찾아 리스트로 반환합니다.

  3. 결과 반환

    매치된 결과를 반복하여 연, 월, 일을 추출하고 이를 정수로 변환한 후 튜플로 묶어 리스트로 반환합니다.

알아둬야 할 개념

re.findall 함수


리스트 컴프리헨션

풀이 2. findall

import re

def solution(data):
    **#1 정규표현식 패턴 정의 및 findall 함수 사용**
    p = re.findall(r'[0-9]+-[0-9]+-[0-9]+', data)
    return [tuple(map(int, i.split('-'))) for i in p] **#2 결과 반환**

단계별 풀이 전략

  1. 정규표현식 패턴 정의 및 findall 함수 사용

    정규표현식을 사용하여 날짜 패턴을 찾아내고, 이를 기반으로 날짜를 추출합니다. 그 후 주어진 패턴과 일치하는 모든 문자열을 찾아 리스트로 반환합니다.