gpt4 book ai didi

java - 在java中解析两种不同模式的好方法

转载 作者:行者123 更新时间:2023-11-29 05:38:25 25 4
gpt4 key购买 nike

我有如下数据:

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;
}


}

但是上面的例子 2 和 3 失败了,因为这些值中没有“<”和“>”?

我该如何解决??谢谢

最佳答案

以下正则表达式应该允许您提取键和值(作为组),因为我假设您想要在不包含 <> 的情况下提取键和值。 :

<([^>]*)>\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"}
};
}

}

关于java - 在java中解析两种不同模式的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18624670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com