이 글에서는 파이썬의 re(정규 표현식) 모듈을 활용해 입력받은 문자열 안에 URL이 포함되어 있는지 확인하고, URL이 존재하면 이를 추출하여 출력하는 방법을 소개합니다. 핵심은 findall() 메서드를 사용하는 것입니다.
알고리즘
- URL을 검사할 문자열을 입력받습니다.
findall()함수는 문자열에서 패턴과 일치하는 모든 비중첩(non-overlapping) 매치를 반환합니다. 문자열은 왼쪽에서 오른쪽으로 스캔되며, 매치된 결과는 발견된 순서대로 리스트 형태로 돌려줍니다.
예제 코드
# 입력 문자열에서 URL을 찾는 프로그램
import re
def url(str):
# findall()을 사용해 문자열 내 유효한 URL 패턴 검색
ur = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\)]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', str)
return ur
# 실행 코드
str = 'https://auth.mywebsite.org / user / python program / https://www.mywebsite.org/'
print("Url is :: ", url(str))
실행 결과
Url is :: ['https://auth.mywebsite.org / user / python program / https://www.mywebsite.org/']
정규 표현식 패턴 해설
위 코드에서 사용된 패턴이 어떤 의미인지 하나씩 살펴보겠습니다.
http[s]?— "http"로 시작하며, 뒤에 "s"가 붙어도 되고 붙지 않아도 됩니다. 즉 http와 https를 모두 허용합니다.://— 프로토콜과 도메인을 구분하는 기호입니다.(?:...)+— 괄호 안의 조건에 해당하는 문자가 하나 이상 연속으로 반복될 수 있음을 의미합니다.[a-zA-Z],[0-9]— 영문자와 숫자를 포함합니다.[$-_@.&+],[!*\(\)]— URL에 자주 등장하는 특수문자와 공백도 허용합니다.%[0-9a-fA-F][0-9a-fA-F]—%20처럼 URL 인코딩된 문자(%XX 형태)도 처리할 수 있습니다.
참고 사항
예제에서는 변수 이름으로 str을 사용했지만, 실제 개발 시에는 파이썬 내장 함수 str()과 이름이 겹치므로 text나 input_str 같은 다른 변수명을 사용하는 것이 좋습니다. 또한 위 패턴은 간단한 URL 검출에는 충분하지만, 복잡한 실무 환경에서는 더 엄격한 검증 라이브러리(예: validators)를 함께 고려해 보세요.