gpt4 book ai didi

Python Regex - 捕获重复模式组

转载 作者:行者123 更新时间:2023-12-01 07:02:57 25 4
gpt4 key购买 nike

我有一个正在尝试解析的日志文件。日志文件示例如下:

Oct 23 13:03:03.714012 prod1_xyz(RSVV)[201]: #msgtype=EVENT #server=Web/Dev@server1web #func=LKZ_WriteData ( line 2992 ) #rc=0 #msgid=XYZ0064 #reqid=0 #msg=Web Activity end (section 200, # SysD 1, Files 222, Bytes 343422089928, Errors 0, Aborted Files 0, Busy Files 0)

我想提取所有以哈希开头并具有键和值的文本。例如,#msgtype=EVENT。任何仅包含哈希值且没有“=”符号的文本都将被视为值。

所以在上面的日志条目中,我想要一个如下所示的列表

#msgtype=EVENT
#server=Web/Dev@server1web
#func=LKZ_WriteData ( line 2992 )
#rc=0
#msgid=XYZ0064
#reqid=0
#msg=Web Activity end (section 200, # SysD 1, Files 222, Bytes 343422089928, Errors 0, Aborted Files 0, Busy Files 0) (Notice the hash present in the middle of the text)

我尝试过 Python 正则表达式 findall 选项,但无法捕获所有数据。

例如:

str='Oct 23 13:03:03.714012 prod1_xyz(RSVV)[201]: #msgtype=EVENT #server=Web/Dev@server1web #func=LKZ_WriteData ( line 2992 ) #rc=0 #msgid=XYZ0064 #reqid=0 #msg=Web Activity end (section 200, # SysD 1, Files 222, Bytes 343422089928, Errors 0, Aborted Files 0, Busy Files 0)'

z = re.findall("(#.+?=.+?)(:?#|$)",str)
print(z)

输出:

[('#msgtype=EVENT ', '#'), ('#func=LKZ_WriteData ( line 2992 ) ', '#'), ('#msgid=XYZ0064 ', '#'), ('#msg=Web Activity end (section 200, ', '#')]

最佳答案

(:?#|$) 是一个捕获组,它匹配可选的 :#,或字符串结尾。由于 re.findall 返回所有捕获的子字符串,因此结果是元组列表。

你需要

re.findall(r'#[^\s=]+=.*?(?=\s*#[^\s=]+=|$)', text)

请参阅regex demo

正则表达式详细信息

  • #[^\s=]+ - #,然后是除空格和 = 之外的任何 1 个以上字符
  • = - 一个 = 字符
  • .*? - 除换行符之外的任何 0+ 个字符,尽可能少
  • (?=\s*#[^\s=]+=|$) - 最多(且不包括)0+ 个空格、#、1+除空格和 = 之外的字符,然后是 = 或字符串末尾。

关于Python Regex - 捕获重复模式组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58560225/

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