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))
    
    # 귀찮으니까 정규식 설명은 생략
    
    
    • 제가 질문 이해를 잘못 했네요 -_-; 정규식 다시 해서 답변 수정 할게요. doodoji 2020.5.28 00:36

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)