我遇到了一个普通正则表达式的问题,它匹配(排序)表格的典型字符串
... "field1" "field2" "field3" "field4" ...
我想要做的当然是分别获取每个字段。因为字段可以包含任何字符,所以我使用的形式是“全部”正则表达式
... \"(.*?)\" +\"(.*?)\" +\"(.*?)\" +\"(.*?)\" + ...
问题是,Java不是生成4个不同的组,而是只给我一个,它合并了上面的4个,即我得到一个字段:
field1" "field2" "field3" "field4
而不是
field1
field2
field3
field4
我甚至尝试过为每个字段做过“([^ \”] *)\“,但结果是一样的。
我怎么能分别得到这4个字段?
答案 0 :(得分:2)
您可以尝试使用String.split
方法进行此类输入。
String input = "... \"field1\" \"field2\" \"field3\" \"field4\" ...";
String[] split = input.split("\"\\s*\"?");
String field1 = split[1]; // field1
String field2 = split[2]; // field2
String field3 = split[3]; // field3
String field4 = split[4]; // field4
答案 1 :(得分:1)
您是否正在调用matcher.group(1),matcher.group(2)等来获取个别匹配?默认方法返回整个匹配,即所有字段。
答案 2 :(得分:1)
每次拨打matcher.find()
都会转到下一场比赛:
String input = "... \"field1\" \"field2\" \"field3\" \"field4\" ...";
Matcher matcher = Pattern.compile("\"(.*?)\"").matcher(input);
while (matcher.find())
System.out.println(matcher.group(1));
或者,如果你真的想要在一场比赛中捕获所有四个:
Matcher matcher = Pattern.compile("\"(.*?)\".*?\"(.*?)\".*?\"(.*?)\".*?\"(.*?)\".*?").matcher(input);
if (matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
System.out.println(matcher.group(4));
}
两者都产生相同的输出,即:
field1
field2
field3
field4