<aside>
💬 lv0, 정규표현식
주어진 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'}를 반환해야 합니다.
import re만 입력하여 한 번 실행하면 그 다음 코드부터 import re를 하지 않아도 사용 가능합니다. solution 함수 내에 re 모듈을 사용하셔도 애러가 나지 않습니다. 코드 내에는 solution 함수만 있어야 하므로 이 2개가 있지 않도록 주의해주세요. 어려우신 분은 제주코딩베이스캠프 유튜브 채널 33번 문제 영상을 참고해주세요.| 입력 (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>
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
패턴 정의
패턴을 구분하여 그룹화 해줍니다. <protocol>, <domain>, <path>, <query>로 그룹이름을 지정합니다.
match 함수 사용
match 함수를 사용하여 패턴과 일치하는 문자열을 찾습니다.
결과 반환
매칭되는 문자열이 존재한다면 key가 그룹의 이름이며 value가 그에 해당하는 그룹의 값으로 구성되어 있는 딕셔너리를 반환합니다.
group 함수
기본 형태: group()
개념: 정규표현식에 의해 매칭된 문자열 중 특정 그룹을 반환하는 함수입니다.
import re
# 정규표현식 패턴 설정
pattern = r"(\\d{3})-(\\d{4})-(\\d{4})" # 전화번호 패턴
# 주어진 문자열
text = "전화번호는 010-1234-5678 입니다."
# 정규표현식을 사용하여 문자열에서 패턴과 일치하는 부분을 찾기
match = re.search(pattern, text)
print(match.group(1)) # 출력: 010
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 결과 반환**
패턴 정의
패턴을 구분하여 그룹화 해줍니다. <protocol>, <domain>, <path>, <query>로 그룹이름을 지정합니다.
match 함수 사용
match 함수를 사용하여 패턴과 일치하는 문자열을 찾습니다.
결과 반환
groupdict 함수를 사용하여 딕셔너리 형태로 결과를 반환해줍니다.
match 함수