正则表达式 - 将字符串值和日期匹配在一起

Regex - Matching String values and Date together

我有一个如下所示的字符串,我应该提取密钥:值,我正在使用正则表达式来实现相同的目的。

line ="Date : 20/20/20  Date1 : 15/15/15  Name : Hello World   Day : Month  Weekday : Monday" 


1) Extracting the key or attributes only.

   re.findall(r'\w+\s?(?=:)',line)
   #['Date ', 'Date1 ', 'Name ', 'Day ', 'Weekday ']

2)Extracting the dates only

   re.findall(r'(?<=:)\s?\d{2}/\d{2}/\d{2}',line)
   #[' 20/20/20', ' 15/15/15']

3)Extracting the strings perfectly but also some wrong format dates.

   re.findall(r'(?<=:)\s?\w+\s?\w+',line)
   # [' 20', ' 15', ' Hello World', ' Month', ' Monday']

但是当我尝试使用 OR 运算符同时提取字符串和日期时,我得到了错误的输出。我相信管道没有正常工作。

re.findall(r'(?<=:)\s?\w+\s?\w+|\s?\d{2}/\d{2}/\d{2}',line)
# [' 20', ' 15', ' Hello World', ' Month', ' Monday']

如果您对以上命令提取日期 (dd/mm/yy) 格式和字符串值有任何帮助,我们将不胜感激。

你需要翻转它。

\s?\d{2}/\d{2}/\d{2}|(?<=:)\s?\w+\s?\w+

Live preview

正则表达式将首先尝试匹配第一部分。如果成功,则不会尝试下一部分。它然后 breaks 的原因是因为 \w 导致匹配日期的第一个数字。由于 / 不是 \w(单词字符),因此它在该点停止。

翻转它会使其首先尝试匹配日期。如果不匹配,则它会尝试匹配 属性 。从而避免了问题。