gpt4 book ai didi

Python正则表达式根据日期字符串分割日志文件

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:50 25 4
gpt4 key购买 nike

我有一些格式不规则的数据(我无法控制),并且单个事件有时跨越多行。我的策略是删除分散在数据中的所有换行符和控制字符以创建单个流,然后根据始终位于新有效事件开头的一致日期/时间字符串将其重新拆分。

我从以下正则表达式开始来完成此任务:

new_data = "".join(ch for ch in attachment_data if unicodedata.category(ch)[0]!="C")
new_data2 = re.split('([0-9]+/[0-9]+/[0-9]+ [0-9]+:[0-9]+:[0-9]+\s[AaPp][Mm];)',new_data)

但是我的分隔符(日期/时间字符串)最终出现在结果列表中的另一个元素中。我需要将它包含在它和下一个分隔符之间的所有数据中。我一直在寻找解决方案,但还没有找到有效的方法。

所以代替:

['9/26/2019 6:30:20 PM;', "Last, First;FRONT DOOR;Admitted 'Last, First' (Card: 123456)   at 'FRONT DOOR' (IN).]

我正在寻找:

['9/26/2019 6:30:20 PM;Last, First;FRONT DOOR;Admitted 'Last, First' (Card: 123456)   at 'FRONT DOOR' (IN).]

谢谢!

最佳答案

使用积极的前瞻:

import re

text = """
9/26/2019 6:30:20 PM;Last, First;FRONT DOOR;Admitted 'Last, First' (Card: 123456) at 'FRONT DOOR' (IN).1.
9/26/2019 6:30:20 PM;Last, First;FRONT DOOR;
Admitted 'Last, First' (Card: 123456) at 'FRONT DOOR' (IN).2.
9/26/2019 6:30:20 PM;Last, First;FRONT DOOR;Admitted 'Last, First' (Card: 123456) at
'FRONT DOOR' (IN).3.
"""
# match d/m/yyyy hh:mm:ss
date_pattern = r'[0-9]{1,2}/[0-9]{1,2}/[0-9]{2,4}\s(?:[0-9]{1,2}:){2}[0-9]{1,2}\s(?:am|pm);'
# extract text begin by date pattern and followed by date pattern or end of text
ptrn = r"(?i){date_pattern}.+?(?={date_pattern}|$)".format(date_pattern=date_pattern)
result = re.findall(ptrn, text.replace('\n', ''))
for line in result:
print(line)

输出:

9/26/2019 6:30:20 PM;Last, First;FRONT DOOR;Admitted 'Last, First' (Card: 123456)   at 'FRONT DOOR' (IN).1.
9/26/2019 6:30:20 PM;Last, First;FRONT DOOR;Admitted 'Last, First' (Card: 123456) at 'FRONT DOOR' (IN).2.
9/26/2019 6:30:20 PM;Last, First;FRONT DOOR;Admitted 'Last, First' (Card: 123456) at 'FRONT DOOR' (IN).3.

关于Python正则表达式根据日期字符串分割日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58280825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com