Python 正则表达式没有从我的日志文件中提取子字符串

Python regex is not extracting a substring from my log file

我正在使用

date = re.findall(r"^(?:\w{3} ){2}\d{2} (?:[\d]{2}:){2}\d{2} \d{4}$", message)

在Python 2.7中提取子串:

Wed Feb 04 13:29:49 2015
Thu Feb 05 13:45:08 2015

来自这样的日志文件:

1424,Wed Feb 04 13:29:49 2015,51
1424,Thu Feb 05 13:45:08 2015,29

它不工作,我需要使用正则表达式来完成这个任务,否则我会用 split() 它。我做错了什么?

您不需要 regex,请使用 split

line = "1424,Wed Feb 04 13:29:49 2015,51"
date = line.split(",")[1]
print date
>>>Wed Feb 04 13:29:49 2015

由于您的子字符串不是从字符串的第一部分开始的,因此您不需要在字符串的开头和结尾声明位置,因此您可以删除 ^$ :

>>> s ="""
1424,Wed Feb 04 13:29:49 2015,51
1424,Thu Feb 05 13:45:08 2015,29"""
>>> date = re.findall(r"(?:\w{3} ){2}\d{2} (?:[\d]{2}:){2}\d{2} \d{4}", s)
>>> date
['Wed Feb 04 13:29:49 2015', 'Thu Feb 05 13:45:08 2015']

另外,作为替代命题,您可以只使用 positive look-behind :

>>> date = re.findall(r"(?<=\d{4},).*", s)
>>> date
['Wed Feb 04 13:29:49 2015,51', 'Thu Feb 05 13:45:08 2015,29']

或者不使用正则表达式,您可以使用 str.split()str.partition() 来完成此类任务:

>>> s ="""
1424,Wed Feb 04 13:29:49 2015,51
1424,Thu Feb 05 13:45:08 2015,29"""

>>> [i.partition(',')[-1] for i in s.split('\n')]
['Wed Feb 04 13:29:49 2015,51', 'Thu Feb 05 13:45:08 2015,29']

一个简单的方法就是用逗号匹配

message = '1424,Wed Feb 04 13:29:49 2015,51 1424,Thu Feb 05 13:45:08 2015,29'
date = re.findall(r",(.*?),", message)
print date

>>> ['Wed Feb 04 13:29:49 2015', 'Thu Feb 05 13:45:08 2015']

DEMO