从 image/text 中查找日期

Find date from image/text

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

   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

您可以使用

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

regex demo

详情

  • (?<!\d) -
  • 之前没有数字
  • \d{1,2} - 1 位或 2 位数字
  • ([.:/ -]) - 点、冒号、斜线、space 或连字符(在第 1 组中捕获)
  • (?:\d{1,2}|\w{3,}) - 1 位或 2 位数字或 3 个或更多字字符
  • </code> - 与第 1 组相同的值</li> <li><code>\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,})\d{4}(?!\d)'
results = [x.group() for x in re.finditer(pattern, text)]
print(results) # => ['12-23-2019', '29 10 2019', '1:2:2018']