【问题标题】:Find date from image/text从图像/文本中查找日期
【发布时间】:2019-11-26 10:52:10
【问题描述】:

我有这样的日期,我需要正则表达式来查找这些类型的日期

   12-23-2019
   29 10 2019
   1:2:2018
   9/04/2019
   22.07.2019

这就是我所做的 首先,我从文本中删除了所有空格,这就是它的样子

   12-23-2019291020191:02:2018

这是我的正则表达式

    re.findall(r'((\d{1,2})([.\/-])(\d{2}|\w{3,9})([.\/-])(\d{4}))',new_text)

它可以找到 12-23-2019 , 9/04/2019 , 22.07.2019 但找不到 29 10 2019 和 1:02:2018

【问题讨论】:

  • 我认为您可以使用正则表达式并从文本中找到日期。
  • @DhruvRajkotia 日期有很多种格式,有些日期有月份的单词,例如 'jan,may,february,sepetember' ,如何为此制作正则表达式?
  • 这里是从查询中查找月份的正则表达式。 ^(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust) ?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)$
  • @WiktorStribiżew 我尝试使用正则表达式删除无用的文本,但我被困了几天。你能指导我正确的路径吗
  • [x.group() for x in re.finditer(r'(?<!\d)\d{1,2}([.:/ -])(?:\d{1,2}|\w{3,})\1\d{4}(?!\d)', text)]

标签: python regex datefinder


【解决方案1】:

你可以使用

(?<!\d)\d{1,2}([.:/ -])(?:\d{1,2}|\w{3,})\1\d{4}(?!\d)

regex demo

详情

  • (?&lt;!\d) - 前面没有数字
  • \d{1,2} - 1 或 2 位数字
  • ([.:/ -]) - 点、冒号、斜线、空格或连字符(在第 1 组中捕获)
  • (?:\d{1,2}|\w{3,}) - 1 位或 2 位数字或 3 个或更多字字符
  • \1 - 与第 1 组中的值相同
  • \d{4} - 四位数
  • (?!\d) - 后面不允许有数字

Python sample usage:

import re
text = 'Aaaa 12-23-2019, bddd   29 10 2019 <===   1:2:2018'
pattern = r'(?<!\d)\d{1,2}([.:/ -])(?:\d{1,2}|\w{3,})\1\d{4}(?!\d)'
results = [x.group() for x in re.finditer(pattern, text)]
print(results) # => ['12-23-2019', '29 10 2019', '1:2:2018']

【讨论】:

  • 我正在从图像中提取此文本,有时日期之间有多个空格。你给出的答案解决了剩下的所有问题
  • @KevinKurien 我假设日月月年之间的分隔符必须相同,您可以使用([.:/-]|\s+) 而不是([.:/ -]),并用相同的模式替换\1 if您不需要确保分隔符相同。
  • 分隔符相同,这不是问题。问题出现在这里12-23- 2019如果有超过1个空格,那么这不起作用
  • @KevinKurien 但是你可以使用[.:/\s-]+...[.:/\s-]+,例如。或\s*[.:/-]\s*。或者,r'(?&lt;!\d)\d{1,2}\s*([.:/ -])\s*(?:\d{1,2}|\w{3,})\s*\1\s*\d{4}(?!\d)'。如果需要,从匹配项中删除空格作为后处理步骤。
  • 谢谢,现在知道了。感谢您的帮助:))
猜你喜欢
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多