我的数据如下:
key value
<foo.bar> <foo>
<foo bar> foo
<foobar1> foo
我想解析它......
obj.setKey(key);
obj.setValue(value);
现在我如何在一个函数中解析它:
到目前为止我已经。
public void setNTriples(String text){
Pattern pattern = Pattern.compile("<(.*?)>");
Matcher matcher = pattern.matcher(text);
int count = 0;
while(matcher.find()) {
if (count == 0){
setKey(matcher.group(1));
count +=1;
}
else if (count == 1){
setValue(matcher.group(1));
count +=1;
}
}
但是上面的例子有两个和三个失败,因为这些值没有“&lt;”和“&gt;”在它?
我如何解决这个问题? 感谢
答案 0 :(得分:1)
对于你的例子,这个似乎是为我选择每个单词:(<[a-zA-Z.\d\s]+>|\w+)
。我不知道它是否是最短的。
答案 1 :(得分:1)
以下正则表达式应允许您提取键和值(作为组),因为我假设您要提取键和值而不包含<>
:
<([^>]*)>\s+[<]?([^>]*)[>]?
这是一个显示结果的TestNG单元测试:
public class RegExTest {
Pattern p = Pattern.compile("<([^>]*)>\\s+[<]?([^>]*)[>]?");
@Test(dataProvider = "data")
public void testRegEx(String line, String k, String v) {
Matcher m = p.matcher(line);
if (! m.matches() ) {
Assert.fail("no match");
}
Assert.assertEquals(m.group(1), k);
Assert.assertEquals(m.group(2), v);
}
@DataProvider
public Object[][] data() {
return new Object[][] {
{"<foo.bar> <foo>", "foo.bar", "foo"},
{"<foo bar> foo", "foo bar", "foo"},
{"<foobar1> foo", "foobar1", "foo"}
};
}
}
答案 2 :(得分:1)
由于你说“值不能有空格”,你应该能够在括号字符上做String.replaceAll
来将它们变成空字符串。然后在空格上String.split
。除了最后一块,你的关键是一切。你的价值是最后一块。