我知道有很多关于子串的帖子,相信我,我已经搜索了很多帖子来寻找答案。
我有很多字符串,来自日志的行,我正在尝试对它们进行分类和解析。
它们看起来像这样:
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 TYPE 静态消息;动态消息
其中filename是日志所在的文件,date是消息放入日志的日期/时间,TYPE是消息的类型,然后消息由两部分组成,一个是静态部分和一个动态部分,静态部分不会因为消息而改变,而动态部分可以改变(显然),它们被 a 分割,;
但;
动态部分可以有更多。
我希望能够提取静态消息和动态消息。
到目前为止,我一直在使用这样的东西:
parts = line.split(";")
static = parts[0]
dynamic = ";".join(parts[1:])
不是很漂亮。而且我的静态部分还包含我不想要的文件名、日期和类型。所以我想我会做这样的事情:
parts = " ".join(":".join(line.split(":")[1:]).split(" ")[4:]).split(";")
static = parts[0]
dynamic = ";".join(parts[1:])
我试过了,它在某种程度上有效,除了有时文件名可能有空格,或者类型可能有空格或某些东西不能正常工作,我有时会得到类型作为静态消息的一部分......效率是这是一个问题,因为这些是成千上万行必须每天解析和分类的日志。所以我想知道除了这个黑客工作之外是否有更好的方法来做到这一点?
编辑:我想我会在日志中提供更多行示例。为了解决我之前所说的问题,有几种类型的条目。
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 TYPE 静态消息;动态消息
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 MODULE.NAME TYPE THREAD.OR.CONNECTION.INFORMATION 静态消息;动态消息
如您所见 - 有两种类型的日志条目。那些没有模块的和那些有模块的,可以连接到连接,也可以连接到线程。这使得解析更加困难。