파이썬 정규표현식 파씽 문의 올립니다

chocokeki의 이미지

파이썬에서 문자열 처리할 일들이 많아 검색을 해보니 정규표현식을 추천하더군요
3.x 환경에서 사용 중입니다.

일단 파일이 여러개 있는 환경인데 그걸 목록으로 가져오고 그 다음 필요없는 파일을 빼는 작업을 하는 중입니다.

목표
req로 이름이 시작하고 확장자가 bin 혹은 bbq인 파일 목록 획득 중에서 마지막 확장자가 md5면 제외해야 함

예시

files = ('req111.bin', 'reg222.bin.md5', 'reg333.bni', 'req444.bbq', 'req4444.tca')
rexp = 'req.+[bin|bbq][^md5]$'
p = re.compile(rexp)
 
for index in files:
    m = p.search(index)
    if m:    
       print(m.group(0))

결과
req111.bin
req333.bni -> 현재 문제를 겪고 있는 부분
req444.bbq

bin 뿐만이 아니라 bni도 목록에 포함되고 있는데요 []를 사용했기 때문에 문자 순서와 상관 없이 파씽이 되고 있는 것 같습니다
혹시 어떻게 해야할지 알 수 있을까요?

raymundo의 이미지

[bin|bbq] 는 'b 또는 i 또는 | 또는 b 또는 b 또는 q인 한 글자'에 해당하지 bin 이라는 문자열을 의미하지 않습니다.

일단 말씀하신 목표만 보면

rext = '^req.+\.(bin|bbq)$'

정도가 되겠네요.

좋은 하루 되세요!

chocokeki의 이미지

와우 감사합니다...
제가 실수로 md5 파일은 제외해야하는 것을 빼먹고 본문을 작성했는데 생각해보니 bin, bbq로 해놓으면 알아서 필터링이 되겠네요

익명 사용자의 이미지

정규표현식이 대체로 편리한 도구이긴 합니다만, 대체로 처음 접하고 나서 한동안 남용하게 되는 경우가 많습니다.

물론 뭐 남용한다고 당장 무슨 심각한 문제가 생기는 건 아닙니다만,
정규 표현식을 짜 넣어서 완성된 코드는 나중에 읽기 힘들고 유지 보수하기는 더 힘들죠.

꼭 정규표현식이 필요하겠다 싶지 않은 경우라면, 저라면 차라리 그냥 이런 식으로 짜는 걸로 만족하렵니다.

    files = ('req111.bin', 'reg222.bin.md5', 'reg333.bni', 'req444.bbq', 'req4444.tca')
    for index in files:
        if index.startswith('req') and (index.endswith('.bin') or index.endswith('.bbq')):
            print (index)
chanik의 이미지

검색패턴이 복잡하지 않으니 이렇게만 하셔도 목적달성이 되겠습니다.

from glob import glob
files = glob('req*.bin') + glob('req*.bbq')

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.