正则表达式:如何提取不完整的日期并进行转换
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<whole_date>(?P<year>\d+)-(?P<month>\d+)(?:-(?P<day>\d+))?)\b
regex101.com/r/DPRGCh/1
【参考方案1】:
您应该为每个year
、month
和day
构建模式,并在一个表达式中将它们全部匹配(使month
和day
可选):
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以上是关于正则表达式:如何提取不完整的日期并进行转换的主要内容,如果未能解决你的问题,请参考以下文章