0

我在用着

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() 它。我究竟做错了什么?

4

3 回答 3

2

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

>>> 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']

此外,作为替代命题,您可以只使用积极的后视

>>> 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()andstr.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']
于 2015-02-11T18:59:47.757 回答
2

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

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']

演示

于 2015-02-11T19:04:46.653 回答
1

你不需要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
于 2015-02-11T18:53:34.797 回答