我发现很难在python中为上面的时间戳模式形成一个正则表达式。我必须在python的列表中搜索与此模式匹配的时间戳。
例如,
2016-06-22 07:55:35,232 [12] INFO
在上面一行中,我必须搜索2016-06-22 07:55:35,232。
我尝试使用以下正则表达式,但它似乎不起作用:
"^\\d{4}[-]?\\d{1,2}[-]?\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}[,]?\\d{1,3}$"
请帮助
由于
答案 0 :(得分:3)
您的问题是最后的$
符号 - 将其从正则表达式中删除。由于$
(行尾)与[12] INFO
>>> re.findall("^\\d{4}[-]?\\d{1,2}[-]?\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}[,]?\\d{1,3}$", '2016-06-22 07:55:35,232 [12] INFO')
[]
>>> re.findall("^\\d{4}[-]?\\d{1,2}[-]?\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}[,]?\\d{1,3}", '2016-06-22 07:55:35,232 [12] INFO')
['2016-06-22 07:55:35,232']
答案 1 :(得分:0)
使用^
和$
封装正则表达式可确保正则表达式只与正则表达式匹配整个字符串,因为^
表示字符串的开头, $
表示结束。如果您希望它能够在任何地方匹配,则应删除^
和$
。如果您只希望时间戳在字符串的开头匹配,请保留^
并删除$
,这是阻止您获得匹配的[12] INFO
,因为您logFH = CreateLog;
optFH = CreateOptions;
1}}在你的字符串的末尾。
答案 2 :(得分:0)
您的模式工作正常,但由于$
,您只匹配字符串末尾。
如果你想匹配这个:
2016-06-22 07:55:35,232
您可以使用此正则表达式。
(?P<date>\d{4}[-]?\d{1,2}[-]?\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}[,]?\d{1,3})
您可以在Regex101
在线试用