使用正则表达式获取所有日期格式并提供说明

时间:2019-05-23 07:07:02

标签: python regex python-3.6

我为自己发明了一种锻炼方法,现在很难理解正则表达式的工作原理。我想要一个带有正确解释的解决方案,这样我就可以消除对正则表达式的疑虑。我正在尝试输入字符串中的所有日期;月,年和日。这是我的字符串以及我所做的事情:

   date_str="je suis ne le 23 Oct 2002,\
   I was born on 23 October 2002,\
   just Oct 23 2002,\
   ye gusta October 23 2002"

  re.findall(r' \d{2}\ ?[a-zA-Z]* \d{2,4}', date_str)

  #Out[162]:
  [' 23 Oct 2002', ' 23 October 2002', ' 23 2002', ' 23 2002']

我也查看了一些代码,有时用问号和冒号来表示一组出现0或1次。我不知道冒号是什么意思。但是我尝试了其他一些方法,这些方法也能获得与上述相同的结果。

  re.findall(r' (?:\d{2})\ ?[a-zA-Z]*\ \d{2,4}', date_str)
  #Out[162]:
  [' 23 Oct 2002', ' 23 October 2002', ' 23 2002', ' 23 2002']

首先,我无法获得最后两个日期,但由于无法在字符串中看到它,所以我无法理解冒号的全部含义。另外,为什么我不能在小组外问号?它给了我错误

1 个答案:

答案 0 :(得分:0)

这可能有点具体。无论如何,也许它可以帮助您。

import re

date_str="je suis ne le 23 Oct 2002,\
I was born on 23 October 2002,\
just Oct 23 2002,\
ye gusta October 23 2002"
a = re.findall(r'[a-zA-Z]+\s+\d+\s\d{2,4}|\d{1,2}\s*?[a-zA-Z]*\s*\d{2,4}', date_str)
print(a)

['2002年10月23日','2002年10月23日','2002年10月23日','2002年10月23日']

  

”       [a-zA-Z] + \ s + \ d + \ s \ d {2,4} | \ d {1,2} \ s *?[a-zA-Z] \ s \ d {2,4}       ”       gm       第一替代项[a-zA-Z] + \ s + \ d + \ s \ d {2,4}       匹配[a-zA-Z] +下面列表中存在的单个字符       +量词-匹配一次和无限次,尽可能多地匹配,并根据需要返回(贪婪)       a-z介于(索引97)和z(索引122)之间的单个字符(区分大小写)       A-Z一个字符,介于A(索引65)和Z(索引90)之间(区分大小写)       \ s +       匹配任何空白字符(等于[\ r \ n \ t \ f \ v])       +量词-匹配一次和无限次,尽可能多地匹配,并根据需要返回(贪婪)       \ d +       匹配一个数字(等于[0-9])       +量词-匹配一次和无限次,尽可能多地匹配,并根据需要返回(贪婪)       \ s匹配任何空格字符(等于[\ r \ n \ t \ f \ v])       \ d {2,4}       匹配一个数字(等于[0-9])       {2,4}量词-匹配2到4次,尽可能多地匹配,并根据需要返回(贪婪)       第二替代\ d {1,2} \ s *?[a-zA-Z] \ s \ d {2,4}       \ d {1,2}       匹配一个数字(等于[0-9])       {1,2}量词-匹配1到2次,尽可能多地匹配,并根据需要返回(贪婪)       \ s *?       匹配任何空白字符(等于[\ r \ n \ t \ f \ v])       *?量词-匹配零次和无限制次数,尽可能少的次数,根据需要扩展(延迟)