웹 페이지나 HTML 문자열에서 앵커(anchor) 태그를 추출해야 할 때 파이썬의 re 모듈과 정규식을 활용하면 간단하게 처리할 수 있습니다. 이 글에서는 정규식 패턴을 사용해 문자열 속의 <a> 태그와 그 내용을 추출하는 방법을 단계별로 살펴봅니다.
1. 기본 패턴 이해하기
가장 먼저 알아야 할 것은 정규식 패턴 구성입니다. 앵커 태그는 일반적으로 다음과 같은 형태를 가집니다.
<a href='https://example.com' target='_blank'>링크 텍스트</a>
여기서 여는 태그는 <a로 시작하고, 속성들이 뒤따르며 >로 닫힙니다. 이를 매칭하기 위한 핵심 패턴은 아래와 같습니다.
<a\b: 'a'로 시작하는 태그명을 정확히 매칭 (anchor, article 등 다른 태그와 구분)[^>]*: 닫는 꺾쇠(>)가 나오기 전까지의 모든 속성 문자를 포함(.*?): 태그 사이의 내용(링크 텍스트)을 캡처 (비탐욕 매칭)</a>: 닫는 앵커 태그 매칭
2. 링크 텍스트만 추출하는 예제
다음 코드는 주어진 문자열에서 앵커 태그 내부의 텍스트만 추출합니다.
예제 코드
import re rex = re.compile(r"<a\b[^>]*>(.*?)</a>") l = "this is text1 <a href='irawati.com' target='_blank'>hi</a> this is text2" result = rex.findall(l) print(result)
출력 결과
['hi']
3. 앵커 태그 전체를 추출하는 예제
태그 자체(속성 포함)를 통째로 가져오고 싶다면 캡처 그룹 없이 패턴을 작성하면 됩니다.
예제 코드
import re rex = re.compile(r"<a[^>]*>.*?</a>") l = "this is text1 <a href='irawati.com' target='_blank'>hi</a> this is text2" result = rex.findall(l) print(result)
출력 결과
["<a href='irawati.com' target='_blank'>hi</a>"]
4. 참고: 꺾쇠 괄호만 찾는 간단한 패턴
[\<\>] 패턴을 사용하면 문자열 안의 모든 꺾쇠 괄호 문자를 찾을 수 있습니다. 다만 이 방법은 태그 구조를 분석하지 못하므로 실제 앵커 태그 추출에는 위에서 소개한 패턴이 더 적합합니다.
import re rex = re.compile(r'[\<\>]') l = "this is text1 <a href='irawati.com' target='_blank'>hi</a> this is text2" print(rex.findall(l))
['<', '>', '<', '>']
5. 더 견고한 방법: BeautifulSoup 활용
정규식은 간단한 경우에 유용하지만, 줄바꿈이나 중첩된 태그가 많은 실제 HTML 문서에서는 한계가 있습니다. 프로덕션 환경에서는 HTML 파서인 BeautifulSoup을 사용하는 것이 좋습니다.
from bs4 import BeautifulSoup
html = "this is text1 <a href='irawati.com' target='_blank'>hi</a> this is text2"
soup = BeautifulSoup(html, "html.parser")
for a in soup.find_all("a"):
print(a.get("href")) # irawati.com
print(a.get_text()) # hi
마무리
간단한 문자열 처리에는 정규식 패턴 r"<a\b[^>]*>(.*?)</a>"로 충분하며, 복잡한 HTML 문서를 다룰 때는 BeautifulSoup 같은 전용 파서를 사용하는 것이 안전하고 유지보수에도 유리합니다.