(くそー、ジョンは私を打ち負かしました。まあ、とにかく例を見ることができます)
他の人が言ったように、正規表現はこの仕事に最適なツールではありません. ファイルパスを扱っている場合は、 os.pathを見てください。
不要なファイルのフィルタリングについてはif 'thumb' not in filename: ...
、パスを分析したら実行できます (どこfilename
にあるstr
)。
そして後世のために、これらの正規表現に関する私の考えを以下に示します。は貪欲であり、先読みの優先度が非常に低いr".*(?!thumb).*"
ため、機能しません。.*
これを見てください:
>>> re.search('(.*)((?!thumb))(.*)', '/tmp/somewhere/thumb').groups()
('/tmp/somewhere/thumb', '', '')
>>> re.search('(.*?)((?!thumb))(.*)', '/tmp/somewhere/thumb').groups()
('', '', '/tmp/somewhere/thumb')
>>> re.search('(.*?)((?!thumb))(.*?)', '/tmp/somewhere/thumb').groups()
('', '', '')
ラストはかなり微妙…
他の正規表現 ( r"^(?!.*thumb).*"
).*
は先読み内にあるため機能するため、文字が盗まれるという問題はありません。または^
を使用しているかどうかによっては、実際には も必要ありません。re.match
re.search
>>> re.search('((?!.*thumb))(.*)', '/tmp/somewhere/thumb').groups()
('', 'humb')
>>> re.search('^((?!.*thumb))(.*)', '/tmp/somewhere/thumb').groups()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'groups'
>>> re.match('((?!.*thumb))(.*)', '/tmp/somewhere/thumb').groups()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'groups'