正则表达式:如何提取不完整的日期并进行转换

Posted

技术标签:

【中文标题】正则表达式:如何提取不完整的日期并进行转换【英文标题】:Regex: how to extract incomplete date and convert 【发布时间】:2021-12-26 02:18:07 【问题描述】:

如何获取可能不包含月份或日期的日期?

现在我只知道如何打破日期

date_n= '2022-12'
match_year = re.search(r'(?P<year_only>(?P<year>\d+))', date_n)
match_month = re.search(r'(?P<whole_date>(?P<year>\d+)-(?P<month>\d+))', date_n)
match_day = re.search(r'(?P<whole_date>(?P<year>\d+)-(?P<month>\d+)-(?P<day>\d+))', date_n)

year = match_year.group('year_only')
month = match_month.group('month')
day = match_day.group('day')

尝试和排除不起作用。

【问题讨论】:

您可以将日期部分设为可选,例如 \b(?P&lt;whole_date&gt;(?P&lt;year&gt;\d+)-(?P&lt;month&gt;\d+)(?:-(?P&lt;day&gt;\d+))?)\b regex101.com/r/DPRGCh/1 【参考方案1】:

您应该为每个yearmonthday 构建模式,并在一个表达式中将它们全部匹配(使monthday 可选):

import re

date_n= '2022-12'
year_pattern = r"(?P<year>\d4)"
month_pattern = r"(?:-(?P<month>\d1,2))"
day_pattern = r"(?:-(?P<day>\d1,2))"
match_date = re.search(rf'year_pattern(?:month_patternday_pattern?)?', date_n)

year = match_date.group('year')
month = match_date.group('month')
day = match_date.group('day')

【讨论】:

它有效,但是......我不知道为什么我不能将不完整的日期写入 datefield 2022.12 中的 models.py。 如果没有任何细节,我不可能回答这个问题(什么是 models.py?datefield 是如何定义的?)。如果您遇到其他问题,请尝试创建一个新问题。 models.py 是 Django 中的一个文件。我有一个只需要完整日期的变量。 docs.djangoproject.com/en/3.2/ref/models/fields/#datefield

以上是关于正则表达式:如何提取不完整的日期并进行转换的主要内容,如果未能解决你的问题,请参考以下文章

如何编写一个正则表达式命令在 python 中将字符串转换为日期时间格式?

用正则表达式提取wps内容

有关正则表达式的问题:将中文字符串中的日期提取出来

正则表达式信息精准提取

使用 python 正则表达式匹配日期

正则表达式实例