我正在使用java并解析具有可变长度数据的数据字符串,如下所示,
kv {
key "prefix"
str_value "prefix1"
}
kv {
key "init"
int_value 1
}
kv {
key "init"
}
我们可以看到最后一个kv标签丢失了一个值字段但仍然有效。想知道我应该使用什么正则表达式来检索kv {}标签之间的任何数据,如下所示。
key“prefix”str_value“prefix1”
key“init”int_value 1
键“init”
这是我用来获取kv分隔符的代码。
scan = new Scanner(new File(this.getFileName())).useDelimiter(".*kv\\s*\\{\\s*[^}].*+");
System.out.println(scan.next());
答案 0 :(得分:2)
像这种模式的东西应该可以解决问题:
kv\s*\{\s*key\s+"([^"]*)"\s*(str_value\s+"([^"]*)"|int_value\s+(\d+))?\s*\}
您可以找到所有匹配并读取每个匹配的第一,第三和第四组的值,以便检索键/值对。
但是,如果您只想捕捉大括号之间的所有内容,无论它是什么,那么您可以做一些更简单的事情:
kv\s*\{([^}]*)}
然后只需从每场比赛中读取第一组的值。