Python 从字符串中提取如期,日期格式有多种

pattern = r"(\d{4}-\d{2}-\d{2}|\d{4}年\d{1,2}月\d{1,2}日|\d{4}\d{2}\d{2}|\d{1,2}.\d{1,2}|\d{1,2}月\d{1,2}日)"
text="7月13日adjfhddj"

result = re.findall(pattern, text)
print(result)

识别结果是:7月13,那个日字没带出来,如果这个字符串中日期格式是2023-07-13或者2023年7月13日或者20230713或者7.13,识别结果都是对的,能怎么写这个正则,可以这些格式的日期或者更多格式的日期都能从字符串中准确识别出来?

pattern = r"(\d{4}-\d{2}-\d{2}|\d{4}年\d{1,2}月\d{1,2}日|\d{4}\d{2}\d{2}|\d{1,2}月\d{1,2}日|\d{1,2}.\d{1,2})"
text="7月13日adjfhddj"
result = re.findall(pattern, text)
print(result)

把pattern改成上边那样就没问题了

这个就需要考虑到各种日期写法了。
比如发现‘月’这个字,就往前提取1--2位,再往后知道发现日字,提取出xx月xx日的格式
当有斜杠时‘/’更需注意该日期是否合法等等
可以加一些if来判断一下

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7672390
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Python 练习实例100-39,有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
  • 同时,你还可以查看手册:python- 定义扩展类型:已分类主题- 终结和内存释放 中的内容
  • 您还可以看一下 刘英老师的Python数据殿堂:数据分析与数据可视化课程中的 概述,数据类型,数组基础小节, 巩固相关知识点
  • 除此之外, 这篇博客: python基础练习题中的 题目二十一:写一个程序,假定小欧生日为2002年12月1日,将其生日作为定值,以今天2021年11月14日为例,作为输入,则输出小欧今年18周岁了!,若以2021年12月1日为例,作为输入,则输出小欧刚好19周岁。可以去农院路庆祝了!以2004年10月15为例,则输出小欧今年1周岁了! 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    程序分析:首先以小欧生日2002年12月1日为标准,统一将月、日化为以年为单位,月除以12,日除以365(二者都需整除,否则年龄带小数点),最后三者相加即可得出年龄。

    思路解析:可将小欧生日2002年12月1日设为定量,再将用户输入的生日将年月日替代,再将其分割一列表现形式输出,便可利用列表下标与小欧生日的定量进行运算,得出年龄。

    代码解析:

    x = 2002
    y = 12
    z = 1
    a = str(input('请输入时间:'))
    b = a.replace('年', ',')
    c = b.replace('月', ',')
    d = c.replace('日', '')
    list1 = d.split(',')
    j = int(list1[0]) - x
    k = (int(list1[1]) - y) // 12
    l = (int(list1[2]) - z) // 365
    print("age为:", (j+k+l))
    


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^