从一行中拆分和提取值?

2024-05-23 19:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

从下面的行中,我想提取日期和时间,包括上午/下午。 但是DateTime的时间部分被跳过。你知道吗

 6/1/2018 12:01:11.490 AM   HEP.U02.OIL.GOV.P2_RUN  <Unit #2>No.2 oil pump runing   On    "

p=[]
xx = "6/1/2018 12:01:11.490 AM  HEP.U02.OIL.GOV.P2_RUN  <Unit #2>No.2 
oil pump runing On  "
new=re.split(r'\s',xx)
print(new)
p.append(new.pop(0))
p.append(new.pop(1))
print(p)

Tags: runnewon时间unitamhepgov
2条回答

我对regex不是很在行,当然也有收紧这个regex的空间,但首先假设datetime字符串有固定的格式。它不验证日期。你知道吗

import re

xx = "6/1/2018 12:01:11.490 AM  HEP.U02.OIL.GOV.P2_RUN  <Unit #2>No.2 oil pump runing On  "

p1 = re.compile('(?:\d{1,2}\/){2}\d{4}\s+(?:\d{2}:){2}\d{2}\.\d{3}\s+[AaPp][Mm]')
p = re.findall(p1, xx)
print(p)

不,time部分存在,pop函数是问题所在,您的正则表达式很好,可以通过运行下面的源代码看到(在本例中不需要poptbh):

简单溶液(不含pop):

import re

xx = (
    "6/1/2018 12:01:11.490 AM  HEP.U02.OIL.GOV.P2_RUN  <Unit #2>No.2 oil pump runing On"
)
new = re.split(r"\s", xx)
print(new[:3])

如预期返回:

['6/1/2018', '12:01:11.490', 'AM']

为什么没用?你知道吗

当您pop元素时,它将从列表中删除。删除0元素('6/1/2018'),新的0元素成为丢失的日期,然后弹出第一个元素,实际上是AM。你知道吗

使用popping,您可以这样做以获得所有三个(假设new已经像以前一样创建了):

for _ in range(3):
    print(new.pop(0))

相关问题 更多 >