【发布时间】:2019-08-24 14:37:51
【问题描述】:
我正在解析我自定义的 Apache 日志,只给我两个值:“时间”和“内存”(值是毫秒数和字节数),它们都是 int64 或 float64,但我是使用正则表达式和 Go 来解析文件,所以当我匹配文件的内容时,它返回“[]”(空括号)并且不填充切片,我的代码是:
for _, line := range lines {
var buffer bytes.Buffer
buffer.WriteString(`\[0-9]+\s`)
buffer.WriteString(`[0-9]+\s`)
re1, err := regexp.Compile(buffer.String())
if err != nil {
log.Fatalf("regexp: %s", err)
}
result := re1.FindStringSubmatch(line)
fmt.Println(result)
}
当我打印结果时,它给了我空括号,当我运行整个程序时,它给出的索引超出范围(这是可以理解的,因为结果是空的)。
我的数据如下所示:
1040 3952
2849 6832
【问题讨论】:
-
你有
\[0-9]+\s[0-9]+\s正则表达式,第一个[不应该被转义。您正在使用FindStringSubmatch但您的正则表达式没有捕获组。预期的结果是什么? -
不要为此使用正则表达式。只需将输入拆分为空格即可。对于这样一个微不足道的例子,正则表达式很慢、很麻烦,而且很难阅读。
-
如果您只需要匹配带有 2 个数字的行,您可以使用
regexp.Compile(`(?m)^([0-9]+)\s+([0-9]+)$`),请参阅 this demo
标签: regex apache parsing go logging