擅长:python、mysql、java
<p>我觉得你的方法太复杂了。我建议使用简单正则表达式和<code>strptime()</code>的组合。你知道吗</p>
<pre><code>import re
from datetime import datetime
date_formats = ['%m/%d/%Y', '%d %b %Y']
pattern = re.compile(r'\b(\d\d?/\d\d?/\d{4}|\d\d? \w{3} \d{4})\b')
data = "... your string ..."
for match in re.findall(pattern, data):
print("Trying to parse '%s'" % match)
for fmt in date_formats:
try:
date = datetime.strptime(match, fmt)
print(" OK:", date)
break
except:
pass
</code></pre>
<p>这种方法的优点是,除了一个更易于管理的正则表达式之外,它不会选择看似合理但不存在的日期,比如<code>2/29/2000</code>(而<code>2/29/2004</code>是有效的)。你知道吗</p>