繁体   English   中英

正则表达式解析日志中的特定字符串[关闭]

[英]Regex parse specific string in log [closed]

这是我的日志

2022-06-28 20:34:55.746 | INFO     | product.views.product_view:list:28 - SEARCH | test serach3
2022-06-28 20:34:57.984 | INFO     | product.views.product_view:list:28 - SEARCH | test serach1
2022-06-28 20:36:44.298 | INFO     | product.views.product_view:list:28 - SEARCH | test serach1
2022-06-28 20:36:50.530 | INFO     | product.views.product_view:list:28 - SEARCH | test serach2
2022-06-28 20:38:11.426 | INFO     | product.views.product_view:list:28 - SEARCH | test serach2
2022-06-28 20:58:34.025 | SUCCESS  | users.services:get_addresses:566 - successfully returned addresses for test.test@yahoo.com

我想在搜索后计算字符串 |

例如:

测试 serach2 - 2

测试 serach1 - 2

测试 serach3 - 1

但所有日志都不相同,第 6 行日志不同,只有在 SEARCH | 之后才能获得的最佳方法是什么? * 细绳 ? 使用正则表达式

您可以使用列表推导:

[match for line in string.split('\n') for match in line.split('- SEARCH | ')[1:]]

其中有两个循环:

  • 第一个循环:在换行符处拆分字符串
  • 第二个循环:在您需要的措辞上分割线- SEARCH | 并删除第一个元素

输出:

['test serach3',
 'test serach1',
 'test serach1',
 'test serach2',
 'test serach2']

注意:如果您想计算列表中元素的出现次数,请查看这个详尽的 SO 答案>> 如何计算列表项的出现次数?


编辑 使用正则表达式:

re.findall(r'(?<= - SEARCH \| ).*', string)

这将检查匹配部分之前是否有您所需的模式,而不匹配它。

此处查看正则表达式演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM