<p>您在<code>'%Y-%m-%d'</code>附近的日期格式无效,因为它应该是<code>'%d/%m/%Y</code>查看您提供的日期:<code>birthday on 20/12/2018</code><code>(dd/mm/yyyy)</code></p>
<p><strong>更改此项</strong>:</p>
<pre><code>date = datetime.datetime.strptime(match.group(), '%Y-%m-%d').date()
</code></pre>
<p>用这个</strong>:</p>
<pre><code>date = datetime.datetime.strptime(match.group(), '%d/%m/%Y').date()
</code></pre>
<p><strong>您的解决方案</strong>:</p>
<pre><code>import datetime
from datetime import date
import re
s = "birthday on 20/12/2018"
match = re.search(r'\d{2}/\d{2}/\d{4}', s)
date = datetime.datetime.strptime(match.group(), '%d/%m/%Y').date()
print (date)
</code></pre>
<p><strong>但是</strong>:</p>
<p>为什么要惹这么多麻烦?当他们更容易和优雅的方式在那里。你知道吗</p>
<p>使用<a href="https://dateparser.readthedocs.io/en/latest/" rel="nofollow noreferrer">^{<cd5>}</a>:</p>
<pre><code>import dateutil.parser as dparser
dt_1 = "birthday on 20/12/2018"
print("Date: {}".format(dparser.parse(dt_1,fuzzy=True).date()))
</code></pre>
<p><strong>输出</strong>:</p>
<pre><code>Date: 2018-12-20
</code></pre>
<p>编辑:</p>
<p>对于已编辑的问题(现在有多个日期),您可以使用<code>regex</code>提取它们:</p>
<pre><code>import re
s = "birthday on 20/12/2018 and wedding aniversry on 04/01/1997 and dob is on 09/07/1897"
pattern = r'\d{2}/\d{2}/\d{4}'
print("\n".join(re.findall(pattern,s)))
</code></pre>
<p><strong>输出</strong>:</p>
<pre><code>20/12/2018
04/01/1997
09/07/1897
</code></pre>
<p><strong>或</strong></p>
<p>使用<code>dateutil</code>:</p>
<pre><code>from dateutil.parser import parse
for s in s.split():
try:
print(parse(s))
except ValueError:
pass
</code></pre>
<p><strong>输出</strong>:</p>
<pre><code>2018-12-20 00:00:00
1997-04-01 00:00:00
1897-09-07 00:00:00
</code></pre>