【发布时间】:2016-05-19 23:26:12
【问题描述】:
我正在使用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
键“初始化”
这是我用来获取 kv 分隔符的代码。
scan = new Scanner(new File(this.getFileName())).useDelimiter(".*kv\\s*\\{\\s*[^}].*+");
System.out.println(scan.next());
【问题讨论】:
-
您可能不应该使用正则表达式来尝试解析多行,尤其是将该正则表达式用作“分隔符”。正则表达式功能强大,但并不总是适合这项工作的工具。您可能需要一个简单的基于令牌的解析器。
-
@JimGarrison 对于基于令牌的解析器,我应该逐行读取并检查每个字符串“startswith”还是任何其他有效的处理方式?
标签: java regex java.util.scanner