python3 正则提取年月日、年月、年思路

使用到知识点:[]    用来表示一组字符串

()    对正则表达式分组并记住匹配的文本

[0-9]    匹配任何数字

\d    匹配一个数字字符,等价于[0-9]

?    匹配0或者2个 非贪婪模式

|    或

提取的文本:1961年5月27日

1961年05月01日

1961年03月05日

1961年11月10日

3000年01月30日

1111年8月27日

1345年09月27日

1574年12月27日

1961年10月12日

61年

1年2月

888年12月

长安元年(701年)

思路:# 匹配数字年

year_pattern="(\d{1,4}年)"

# 匹配月 月比较特殊 可能会出现01月 1月这两种情况 还有10月,12月

month_pattern="(([0?][1-9])月)|(([1?][0-2])月)|([1-9]月)"

# 匹配日 保证匹配的数字是1-31,暂未考虑单双月和2月 闰年

day_pattern="([0?][1-9]日)|([1?][0-9]日)|([2?][1-9]日)|([3][0-1]日)"

date_pattern="(\d{1,4}年)((([0?][1-9])月)|(([1?][0-2])月)|([1-9]月)?)(([0?][1-9]日)|([1?][0-9]日)|([2?][1-9]日)|([3][0-1]日)?)"

import re

def get_date(val):

res=re.search(date_pattern,val)

if res:

return res.group()

return None

日期正则表达式构建规则分析

写复杂正则的一个常用方法,就是先把不相关的需求拆分开,分别写出对应的正则,然后组合,检查一下相互的关联关系以及影响,基本上就可以得出对应的正则。

按闰年的定义可知,日期可以有几种分类方法。

根据天数是否与年份有关划分为两类

与年份无关的一类中,根据每月天数的不同,又可细分为两类1、3、5、7、8、10、12月为1-31日

4、6、9、11月为1-30日

与年份有关的一类中平年2月为1-28日

闰年2月为1-29日

根据包含日期不同可划分为四类所有年份的所有月份都包含1-28日

所有年份除2月外都包含29和30日

所有年份1、3、5、7、8、10、12月都包含31日

闰年2月包含29日

正则实现

针对每一个规则写出对应的正则,以下暂按xx年xx月xx日格式进行实现。

先考虑与年份无关的前三条规则,年份可统一写作((?!0000)[0-9]{1,4}年)

下面仅考虑月和日的正则

包括平年在内的所有年份的月份都包含1-28日(0?[1-9]|1[0-2])月(0?[1-9]|1[0-9]|2[0-8])日

包括平年在内的所有年份除2月外都包含29和30日(0?[13-9]|1[0-2])月(29|30)日

包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日(0?[13578]月|1[02]月)(31日)

参考文章:

https://www.cnblogs.com/fnlingnzb-learner/p/11804303.html

python提取日期中的年月_python3 正则提取年月日、年月、年思路相关推荐

  1. Python提取字符串中数字(非正则提取)

    今天遇到了一个题目记录一下,提取字符串中整数和浮点数. 下方是我的代码 # 提取字符串中的整数或者浮点数 s = input() res = [] count = 0 for i in range(l ...

  2. mysql提取日期中的年月

    SQL里怎么把日期截取为月份 1.首先我们需要找到一个带日期字段的数据表. 2.接下来向表中插入日期值. 3.然后我们通过month函数获取月份即可,注意month里添加的是列名. 4.运行SQL语句 ...

  3. Excel公式向导一键提取日期中日的操作方法

    今天小编要和大家分享的是,Excel公式向导一键提取日期中日的操作方法 (方方格子插件) 1.先看动图演示吧 2.选择第一个日期操作 3.选择公式向导操作按钮 4.选择取时间中的部分的操作命令 5.弹 ...

  4. Excel提取日期中年份的操作方法

    今天小编要和大家分享的是,Excel提取日期中年份的操作方法,那为不会函数的你找到了一种巧妙的方法 (方方格子插件) 1.先看动图演示吧 ​ 2.选中日期内容 3.选择方方格子公式向导按钮 4.选择取 ...

  5. Excel一键提取日期中月份的操作方法

    如图所示的日期,今天小编将通过Excel一键提取日期中月份给提取出来,该如何操作呢 (方方格子插件) 1.先看动图演示吧 2.选择第一个开始日期 3.选择公式向导按钮 4.选择其中的取时间中的部分 5 ...

  6. php 取字符串中的字母数字,php如何提取字符串中的数字?php提取字符串中数字的方法总结(附代码)...

    本篇文章给大家带来的内容是关于php如何提取字符串中的数字?php提取字符串中数字的方法总结(附代码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. PHP提取字符串中的第一组数字 ...

  7. python花括号怎么取_Python如何正则提取第三层花括号()里的内容?

    举例:我想把如下字符串中第三层花括号的内容提取出来{supportedBandCombination-r10{{{bandEUTRA-r103,bandParametersUL-r10{{ca-Ban ...

  8. java 正则 提取数字_java使用正则提取字符串中的数字(例如提取短信中的验证码)详解...

    使用java正则可以很方便的从字符串中提取符合条件的内容. 1.提取字符串中所有的手机号: private void getPhoneNum(String smsBody) { Pattern pat ...

  9. python提取cad坐标_怎么提取cad中坐标?CAD批量提取坐标点的三种方法

    经常有一些小伙伴问,CAD中怎么批量提取坐标点,今天给大家总结三种方法. 方法一:多段线顺序连接并提取. 1.多段线pl连接点: 2.li命令提取坐标: 3.将点位粘贴至excel,利用数据,分列,最 ...

最新文章

  1. Android 9.0 系统弹框
  2. java中keepalived_Keepalived简明介绍
  3. maven学习6 Eclipse下Tomcat常用设置
  4. 【今晚七点】:对话快手张亮——聊聊音视频出海
  5. 常用的几种卷积神经网络介绍
  6. 阿里云飞天洛神2.0:高性能网络软硬一体化技术实践
  7. php修改音频文件_php获取mp3文件信息时长修改
  8. C++复习(虚函数)
  9. 拉格朗日乘子法 那些年学过的高数
  10. 博客V7之后,喜庆排名进入2000之内
  11. matlab切片操作
  12. 苹果Mac上的6 款值得开机启动的工具
  13. FFmpeg之音频封装格式、音频编解码器
  14. Spring Boot 项目参数校验的常见使用场景
  15. 微信抢票应用开发总结
  16. 【soft6星评论】伯俊软件借用中台撬动新一轮互联网化
  17. python使用xlwings库操作Excel常见操作
  18. 优化vue打包chunk-vendors.js 过大
  19. UML介绍及怎么看UML图
  20. 微信小程序官方调整头像昵称获取问题;微信扫码链接wifi,wifi地推,两种可行的解决方案

热门文章

  1. 广州市天河区2021-2022学年九年级第一学期期末考试英语试题
  2. HTTP协议协议报文结构请求响应数据报分析
  3. 周易测算网站H5源码在线起名运势测算网站系统源码
  4. 渭南师范计算机学院男女比例,全国高校男女比例大揭秘!去这些大学怕是要单身四年了...
  5. InfoPath 系列:表单的发布与共享
  6. SQL效率轻优化【白丁水笔知其然】
  7. Win10 将D盘多余空间分配给C盘
  8. 小白c语言学习笔记(2)——有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。
  9. 热电偶和热电阻的区别
  10. centos系统性能监控常用软件介绍