0

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

   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

4

1 回答 1

1

您可以使用

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

查看正则表达式演示

细节

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

Python 示例用法

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']
于 2019-11-27T18:12:30.700 回答