擅长:python、mysql、java
<p><strong>两个问题</strong></p>
<ol>
<li>需要在正则表达式模式中使用原始原始原始字符串r'…'</li>
<li>在本例中,re.search不适用于re.findall<a href="https://stackoverflow.com/questions/45772736/python-regex-why-does-findall-find-nothing-but-search-works">see answer to why does ^{<cd1>} find nothing, but ^{<cd2>} works?</a>。所以可以使用搜索来查找字符串中第一个出现的日期</li>
</ol>
<p><strong>代码</strong></p>
<pre><code>def validate_date(text):
date_regex = r'^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$'
return re.search(date_regex, text)
</code></pre>
<p><strong>测试</strong></p>
<pre><code>date = validate_date("02.02.2020")
print(date.group())
# Output: 02.02.2020
</code></pre>