<p>两个正则表达式:</p>
<ol>
<li><code>\d{4}(?:\d?|\d{2})(?:\d?|\d{2})\.faifb1p16m2\.nc</code></li>
<li><code>\d{8}\.faifb1p16m2\.nc</code></li>
</ol>
<p>样本数据:</p>
<ol>
<li>20140131.faifb1p16m2.nc</li>
<li>2014131.faifb1p16m2.nc</li>
<li>201412.faifb1p16m2.nc</li>
<li>201411.faifb1p16m2.nc</li>
<li>20141212.faifb1p16m2.nc</li>
<li>2014121.faifb1p16m2.nc</li>
<li>201411.faifb1p16m2.nc</li>
</ol>
<p>第一个正则表达式将匹配所有7个条目。第二个正则表达式将只匹配1和5。我可能把正则表达式弄得比我需要的复杂多了。你知道吗</p>
<p><strong>您将需要第二个正则表达式,但我只是将第一个列为示例。</strong></p>
<pre><code>from glob import glob
import re
re1 = r'\d{4}(?:\d?|\d{2})(?:\d?|\d{2})\.faifb1p16m2\.nc'
re2 = r'\d{8}\.faifb1p16m2\.nc'
l = [f for f in glob('*.faifb1p16m2.nc') if re.search(re1, f)]
m = [f for f in glob('*.faifb1p16m2.nc') if re.search(re2, f)]
print l
print
print m
#Then, suppose you want to filter and select everything with '12' in the list m
print filter(lambda x: x[4:6] == '12', m)
</code></pre>
<p>作为<a href="https://stackoverflow.com/questions/13031989/regular-expression-using-in-glob-glob-of-python">another similar solution shows</a>,您可以放弃glob操作系统列表目录(),所以:</p>
<pre><code>l = [f for f in glob('*.faifb1p16m2.nc') if re.search(re1, f)]`
</code></pre>
<p>变成:</p>
<pre><code>l = [f for f in os.listdir() if re.search(re1, f)]
</code></pre>
<p>然后剩下的代码就很棒了。使用<a href="http://docs.python.org/2/library/glob.html" rel="nofollow noreferrer">glob</a>的一个好处是,您可以使用<code>iglob</code>,它与glob类似,但作为迭代器,在遍历包含大量文件的目录时可以提高性能。你知道吗</p>
<p>还有一件事,下面是另一篇stackoverflow文章,概述了<a href="https://stackoverflow.com/questions/890128/python-lambda-why">python's infamous lambda feature</a>。它通常用于函数<code>map</code>、<code>reduce</code>、<code>filter</code>,等等。你知道吗</p>