用于解析特定数据集的正则表达式

时间:2016-05-19 23:26:12

标签: java regex java.util.scanner

我正在使用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());

1 个答案:

答案 0 :(得分:2)

像这种模式的东西应该可以解决问题:

kv\s*\{\s*key\s+"([^"]*)"\s*(str_value\s+"([^"]*)"|int_value\s+(\d+))?\s*\}

Demo

您可以找到所有匹配并读取每个匹配的第一,第三和第四组的值,以便检索键/值对。

但是,如果您只想捕捉大括号之间的所有内容,无论它是什么,那么您可以做一些更简单的事情:

kv\s*\{([^}]*)}

然后只需从每场比赛中读取第一组的值。