在Java 中,您不能将多个匹配项捕获到一个组中,即不能使用(?:([^:]+):)+
to collectlvt
等一次将多个匹配项放入一个vgt
组中。
您可以做的是将文本分成单独的行,如果您知道总是有 4 个组,请使用如下表达式连续调用find()
4group(0)
次[^:]+
:这应该在 4 个调用中捕获、lvt
和vgt
。mwi-ao
44.00m
一些伪代码(未经测试,因此可能包含拼写错误:)):
Pattern p = Pattern.compile("[^:]+");
String input = ...;
String[] lines = input.split("\\s");
for( String line : lines ) {
//note that for simple cases like above you could also just split by ":"
Matcher m = p.matcher(line);
List<String> elements = new LinkedList<String>();
while( m.find() ) {
elements.add( m.group(0) );
}
//get the first 4 elements from the list
//if there are less then 4 in the list, the line didn't match
}
编辑:我更新了答案以匹配已编辑的问题,该问题似乎用冒号(:
)分隔“行”我的空格和字段。