<p>如果你知道这些领域的顺序。你可以用日期时间.strtime地址:</p>
<pre><code>from datetime import datetime
l = ['1','2','01/02/2015','3','4','1-05-2015','5','Another Ex/ample','6']
out = []
for ele in l:
try:
out.append(datetime.strptime(ele,"%d/%m/%Y").strftime("%Y-%m-%d"))
except ValueError:
out.append(ele)
print(out)
</code></pre>
<p>我不知道您如何期望<code>'1-05-2015'</code>变成<code>'2015-01-05'</code>,因为您只考虑日期的正斜杠:</p>
<p>如果要测试多个模式:</p>
<pre><code>out = []
for ele in l:
for patt in ["%d/%m/%Y","%d-%m-%Y"]:
try:
p1 = datetime.strptime(ele,patt).strftime("%Y-%m-%d")
if p1:
out.append(p1)
break
except ValueError as e:
print(e)
else:
out.append(ele)
print(out)
['1', '2', '2015-01-02', '3', '4', '2015-01-05', '5', 'Anot/her Ex/ample', '6']
</code></pre>
<p>您还可以根据长度进行筛选,并仅尝试分析正确长度的字符串:</p>
<pre><code>for ele in l:
ln = len(ele)
if 7 <= ln > 10:
out.append(ele)
continue
for patt in ["%d/%m/%Y", "%d-%m-%Y"]:
try:
p1 = datetime.strptime(ele,patt).strftime("%Y-%m-%d")
if p1:
out.append(p1)
break
except ValueError as e:
print(e)
else:
out.append(ele)
</code></pre>
<p>正则表达式可能会匹配的不仅仅是日期,所以除非您100%确定,否则至少应该在添加之前将正则表达式返回的内容强制转换为datetime对象。你知道吗</p>