我有一个看起来像以下的字符串,我应该提取密钥:值,我正在使用正则表达式。
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)格式和字符串值的任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
你需要翻转它。
\s?\d{2}/\d{2}/\d{2}|(?<=:)\s?\w+\s?\w+
Regex将首先尝试匹配第一部分。如果成功,它将不会尝试下一部分。然后中断的原因是因为\w
导致匹配日期的第一个数字。由于/
不是\w
(单词字符),因此会在此时停止。
翻转它会使它首先尝试匹配日期。如果它不匹配,则尝试匹配属性。从而避免了这个问题。