<aside> 💬 lv0, 정규표현식

URL 및 쿼리스트링 파싱

문제 설명

주어진 URL에서 프로토콜, 도메인, 경로, 그리고 쿼리스트링을 추출하는 함수를 작성해주세요. URL은 프로토콜://도메인/경로?쿼리스트링 형식을 따릅니다. 쿼리스트링은 선택적이며, 없는 경우도 고려해야 합니다.

예를 들어, URL "https://www.weniv.co.kr/path/to/resource?user=abc&lang=en"에서 함수는 {'protocol': 'https', 'domain': 'www.weniv.co.k', 'path': '/path/to/resource', 'query': 'user=abc&lang=en'}를 반환해야 합니다.


제한 사항


입출력 예

입력 (URL 문자열) 출력 (프로토콜, 도메인, 경로, 쿼리스트링 딕셔너리)
"http://www.weniv.co.k" {'protocol': 'http', 'domain': 'www.weniv.co.k', 'path': '', 'query': ''}
"https://www.weniv.co.kr/path/to/resource?user=abc&lang=en" {'protocol': 'https', 'domain': 'www.weniv.co.kr', 'path': '/path/to/resource', 'query': 'user=abc&lang=en'}
"ftp://ftp.weniv.co.kr/folder?page=1" {'protocol': 'ftp', 'domain': 'ftp.weniv.co.kr', 'path': '/folder', 'query': 'page=1'}

입출력 설명

각 URL에서 프로토콜, 도메인, 경로, 쿼리스트링을 추출하여 딕셔너리 형태로 반환합니다.

</aside>

😺 풀이 1. group, match

import re

def solution(data):
    pattern = r"(?P<protocol>https?|ftp)://(?P<domain>[^/\\s]+)(?P<path>/[^?]*|)(\\?(?P<query>[^#\\s]*))?" #1 패턴 정의
    match = re.match(pattern, data) #2 match 함수 사용
    if match:
        return {
            "protocol": match.group("protocol"),
            "domain": match.group("domain"),
            "path": match.group("path") if match.group("path") else "",
            "query": match.group("query") if match.group("query") else "",
        } #3 결과 반환
    else:
        return None

단계별 풀이 전략

  1. 패턴 정의

    패턴을 구분하여 그룹화 해줍니다. <protocol>, <domain>, <path>, <query>로 그룹이름을 지정합니다.

  2. match 함수 사용

    match 함수를 사용하여 패턴과 일치하는 문자열을 찾습니다.

  3. 결과 반환

    매칭되는 문자열이 존재한다면 key가 그룹의 이름이며 value가 그에 해당하는 그룹의 값으로 구성되어 있는 딕셔너리를 반환합니다.

알아둬야 할 개념

group 함수

풀이 2. gruopdict

import re

def solution(data):
    result = re.match(r\\"(?P<protocol>.*)://(?P<domain>.[^/]*)(?P<path>[^?]*)\\\\??(?P<query>.*)\\", data) **#1 패턴정의, #2 match 함수 사용**
    return result.groupdict() **#3 결과 반환**

단계별 풀이 전략

  1. 패턴 정의

    패턴을 구분하여 그룹화 해줍니다. <protocol>, <domain>, <path>, <query>로 그룹이름을 지정합니다.

  2. match 함수 사용

    match 함수를 사용하여 패턴과 일치하는 문자열을 찾습니다.

  3. 결과 반환

    groupdict 함수를 사용하여 딕셔너리 형태로 결과를 반환해줍니다.

알아둬야 할 개념

match 함수