HTML <a target= 부분 정규식
조회수 485회
import re
a = '<a target="_blank" href="https://ccc"><img src="bbb" border="0"></a>'
b =re.sub("<a+href=[^>]",'',a)
print(b)
a 에 있는 <a target= 부터 href="주소">
까지만 삭제하고 싶습니다.
href 뒤에 주소 부분은 항상 다른 주소가 들어가서 정규식을 활용해서 제거하고 싶었는데 나름 정규식을 만들어 봤는데 <a+href=[^>]
안되네요... 정규식 어떻게 만들어야 할까요?
감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
정규표현식은
- 인풋의 패턴이 어떻게 되느냐
- 무엇을 매칭시킬 것이냐
에 따라 천차만별로 나올 수 있습니다.
질문자님이 다루는 데이터의 패턴을 모두 알 수 없으니 표현식 자체는 그냥 참고만 해 주세요.
import re a = '<a target="_blank" href="https://ccc"><img src="bbb" border="0"></a>' # 문자열 소비(consume)하지 않는 lookbehind, lookahead 사용해서 substitute b = re.sub(r"(?<=<a).*?(?=>)", "", a) print(b) # 위 방식과는 반대로, 역 매칭 후 캡쳐링 그룹을 통해 join m = re.search(r"(^<\w+).*?(>.*)", a) if m: print(''.join(m.group(1, 2)))
아래 건, 질문 이해를 잘못하고 답변 단 거였습니다...
하이라이트 부분 모두를 삭제하고 싶으신 줄 알았어요. 후... 그냥 무시하세요. -_-;
import re # 뒤의 태그도 지워야 할 듯 합니다. a = '<a target="_blank" href="https://ccc"><img src="bbb" border="0"></a>' # 한 번에 다 지우는게 힘들면 나눠서 지우는 것도 하나의 방법입니다. b = re.sub("</a>$", "", re.sub("^<a.*?>", "", a)) print(b) # 살짝 일반화 하여 b = re.sub("</\w+>$", "", re.sub("^<\w+(\s.*?)?>", "", a)) print(b) # 조금 더 일반화 하여 # 열기/닫기가 온전히 있는 가장 밖의 태그(outer tag)의 innerHTML을 캡쳐링 m = re.search(r"<(\w+)(\s.*?)?>(.*)</\1>", a) if m: print(m.group(3)) # 귀찮으니까 정규식 설명은 생략
댓글 입력