<p>请在正则表达式之前附加前缀<code>r</code></p>
<p>即</p>
<pre><code>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})$'
</code></pre>
<p>这里,字符串文字上的r前缀是多余的。但是,它通常用于正则表达式文本。r''(和其他带有r前缀的Python引用形式)用于定义“原始”字符串。。。也就是说,它们是(几乎)没有对字符串求值的字符串(对于\字符序列)</p>
<p>解决方案:</p>
<pre><code>import re
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.finditer(date_regex, text)
date = validate_date("02.02.2020")
for match in date:
print(match.group())
# match start: match.start()
# match end (exclusive): match.end()
# matched text: match.group()
</code></pre>