파이썬 정규식 질문드려요!

조회수 503회

아래처럼 텍스트를 인풋받아서 확장자가 txt이거나 hwp인 경우를 제외하고 나머지 단어를 출력하려고 합니다.

이때 정규식은 어떻게 되어야 할까요? 이틀 고민하다가 질문드립니다.

input : liveL.ppt, abcd.txt, img.pdf, chessrule.hwp
output: liveL.ppt, img.pdf

\b(?!\w+.(txt|hwp)).*(?=\w+.(txt|hwp))\b 이렇게 정규식을 짜보았는데 전체를 대상으로 찾지도 못하고, 쉼표까지 같이 출력해냅니다. 도움 간절히 부탁드립니다.

  • 꼭 정규식으로 해야하는 이유가 있을까요? 김호원 2020.6.3 09:26

1 답변

  • 꼭 정규식으로만 해야 한다 라는 게 아니라면 그냥 정말 심플하게 접근하면 됩니다.

    input_string = "liveL.ppt, abcd.txt, img.pdf, chessrule.hwp"
    
    # 텍스트를 파일명 단위 목록으로 변환한다
    input_list = input_string.split(", ")
    
    # 목록에서 .hwp도 없고 .pdf도 없는 것만 뽑는다
    # 파일명이 .hwp...pdf...txt 같은게있을 경우 문제가 되겠지만 그건 좀 나중의 이야기
    output_list = filter(lambda x: '.hwp' not in x and '.pdf' not in x, input_list)
    
    # 원하는 대로 가공해서 쓴다
    output_string = ", ".join(output_list)
    print(output_string)
    

    더 나가서... 저 파일명들의 텍스트가 예컨대 사용자가 웹페이지 폼으로 입력한 텍스트라거나 그런 게 아니고 실제로 어떤 디렉토리에 있는 물리적 파일들의 목록을 보기 편하게 만든 것에 불과하다면... 그냥 바로 그 디렉토리의 파일들을 조건부로 뒤지는 작업을 하는 편이 더 낫지 않겠는가 합니다. 요컨대 정말 하고 싶은 일을 가장 원초적인 방법으로 하자는 거지요.

    정말 하고 싶으신 작업이 뭔가요? 경우에 따라서는 정규식보다 더 합리적인 방법이 있을지도 모릅니다.

    • 감사합니다! 덕분에 해결했습니다. 정규식으로 해결해야 된다는 생각만 가지고 하느라, 괜히 어렵게 돌아가고 있었던 것 같습니다. 알 수 없는 사용자 2020.6.23 20:37

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

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

(ಠ_ಠ)
(ಠ‿ಠ)