<p>在处理日期和时间时,最好首先将日期转换为Python<code>datetime</code>对象,而不是尝试使用正则表达式更改它。然后可以更容易地将其转换回所需的日期格式。你知道吗</p>
<p>但是对于前导零,<a href="https://docs.python.org/2/library/datetime.html?highlight=strptime#strftime-and-strptime-behavior" rel="nofollow noreferrer">formatting options</a>只提供前导零选项,因此为了获得更大的灵活性,有时需要将格式与标准Python格式混合使用:</p>
<pre><code>from datetime import datetime
for test in ['2018-Feb-23-05-18-11', '2018-Feb-23-05-8-11', '2018-Feb-1-0-0-0']:
dt = datetime.strptime(test, '%Y-%b-%d-%H-%M-%S')
print '{dt.year}-{}-{dt.day}-{dt.hour}-{dt.minute:02}-{dt.second}'.format(dt.strftime('%b'), dt=dt)
</code></pre>
<p>给你:</p>
<pre class="lang-none prettyprint-override"><code>2018-Feb-23-5-18-11
2018-Feb-23-5-08-11
2018-Feb-1-0-00-0
</code></pre>
<p>它使用<code>.format()</code>函数来组合各个部分。它允许传递对象,然后格式化可以直接访问对象的属性。唯一需要使用<code>strftime()</code>格式化的部分是月份。你知道吗</p>
<hr/>
<p>这将得到相同的结果:</p>
<pre><code>import re
for test in ['2018-Feb-23-05-18-11', '2018-Feb-23-05-8-11', '2018-Feb-1-0-0-0']:
print re.sub(r'(\d+-\w+)-(\d+)-(\d+)-(\d+)-(\d+)', lambda x: '{}-{}-{}-{:02}-{}'.format(x.group(1), int(x.group(2)), int(x.group(3)), int(x.group(4)), int(x.group(5))), test)
</code></pre>