如何用Regex解析三种格式的日期字符串?(禁用Datetime库)
解决日期字符串的正则解析问题
没问题,我来帮你用正则表达式搞定这三种格式的日期解析!核心思路是用字符类匹配不同的分隔符(.、-、/),同时通过捕获分组精准提取日、月、年信息。
完整代码实现
import re date = "13.06.2020" date2 = "13-06-2020" date3 = "13/06/2020" for i in [date, date2, date3]: # 正则表达式:捕获两位日 + 任意分隔符 + 两位月 + 任意分隔符 + 四位年 finder = re.findall(r'(\d{2})[./-](\d{2})[./-](\d{4})', i) if finder: # 确保匹配成功(避免非法格式报错) day, month, year = finder[0] print(f"day: {day}") print(f"month: {month}") print(f"year: {year}") print("---")
正则表达式拆解
(\d{2}):捕获分组,匹配两位数字(对应日/月),括号会把匹配到的内容单独保存,方便后续提取[./-]:字符类,匹配任意一种分隔符(点、横杠、斜杠),把横杠放在最后是为了避免被当成“范围符号”(比如[a-z]的横杠)(\d{4}):捕获分组,匹配四位数字(对应年份)
为什么你的原代码没成功?
你之前用re.findall没得到预期结果,大概率是正则表达式的问题:
- 没有同时兼容三种不同的分隔符,只写了某一种(比如只匹配
.) - 没有用捕获分组
()包裹需要提取的内容,导致findall返回的是整个匹配串,而不是拆分后的日/月/年
额外小提示
如果后续需要兼容一位数的日/月(比如3.6.2020),可以把正则里的\d{2}改成\d{1,2},这样就能匹配1-2位的数字了。
内容的提问来源于stack exchange,提问作者Murat Demir
相关产品推荐
相关产品推荐

