파이썬 정규식 질문드려요!
조회수 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
이렇게 정규식을 짜보았는데 전체를 대상으로 찾지도 못하고, 쉼표까지 같이 출력해냅니다. 도움 간절히 부탁드립니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
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
댓글 입력