Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 문자열에서 URL 찾기 – re 모듈과 findall() 활용법

이 글에서는 파이썬의 re(정규 표현식) 모듈을 활용해 입력받은 문자열 안에 URL이 포함되어 있는지 확인하고, URL이 존재하면 이를 추출하여 출력하는 방법을 소개합니다. 핵심은 findall() 메서드를 사용하는 것입니다.

알고리즘

  1. URL을 검사할 문자열을 입력받습니다.
  2. 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()과 이름이 겹치므로 textinput_str 같은 다른 변수명을 사용하는 것이 좋습니다. 또한 위 패턴은 간단한 URL 검출에는 충분하지만, 복잡한 실무 환경에서는 더 엄격한 검증 라이브러리(예: validators)를 함께 고려해 보세요.