 <p>You have multiple problems here:</p> <ul> <li><code>r</code> simply means treat the string as a raw string, it looks like you might think it creates a regular expression object; (in any case, <code>zip.extract()</code> only accepts strings)</li> <li>The <code>*</code> quantifier at the start of the regex has no character before it to match</li> </ul> <p>You need to manually iterate through the zip file index and match the filenames against your regex:</p> <pre><code>from zipfile import ZipFile import re zip = ZipFile('myzipfile.zip') for info in zip.infolist(): if re.match(r'.*test.*\.xlsx$', info.filename): print info.filename zip.extract(info) </code></pre> <p>You might also consider using shell file globbing syntax: <code>fnmatchcase(info.filename, '*.test.*.xls')</code> (behind the scenes it converts it to a regex but it makes your code slightly simpler)</p>