首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从字符串中检索日期

从字符串中检索日期
EN

Stack Overflow用户
提问于 2018-01-23 17:59:50
回答 3查看 68关注 0票数 0

我试图从字符串中检索一个日期。问题是这个日期的模式变化很大(字符串来自OCR读取)。以下是我需要识别的模式:

  • 11/11/1111 (我已经能拿到这个了)
  • 11-11-1111 (我已经能拿到这个了)
  • 111111(我已经能拿到这个了)
  • 11-11- 1111
  • 11 11 1111
  • 11-11 1111
  • 23- 10-17
  • 9 06- 17

到目前为止,我所拥有的RegEx是一种轻微的调整(它现在允许空间而不是仅仅-或/分隔数字)与stackoverflow回答

代码语言:javascript
运行
复制
match_date=re.search(r'(?:(?:31(\/|-|\.| )(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.| )(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.| )(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})',line)

有没有办法为这样的“流体”日期结构建立一个正则表达式?

EN

回答 3

Stack Overflow用户

发布于 2018-01-23 18:16:38

Regex\b(?:\d{1,2}[- /]\s?){2}(?:\d{4}|\d{2})\b还是^(?:\d{1,2}[- /]\s?){2}(?:\d{4}|\d{2})$

Regex演示

票数 2
EN

Stack Overflow用户

发布于 2018-01-23 18:12:50

你可以去

代码语言:javascript
运行
复制
\b\d{1,2}[- /]+\d{1,2}[- /]+\d{2,4}\b

regex101.com上的演示

票数 1
EN

Stack Overflow用户

发布于 2018-01-23 19:29:21

我知道regex是一个更好的答案,因为只有一行您可以匹配所有的可能性,但我更喜欢转换到日期时间。

代码语言:javascript
运行
复制
from datetime import datetime
string = "11- 11- 1111"

for fmt in ('%Y-%m-%d', '%d- %m- %Y', '%d %m %Y', '%d- %m- %y'):
    try:
       datetime_object = datetime.strptime(string, '%d- %m- %y')
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48408057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档