你好我想从一个带有重复模式的字符串中获取信息。 例如:
Matematika 1#1#0 @ Fizika 1#1#6 @ Osnovi na injenernoto proektirane 1#1#5 @ PIK 1#1#6 @ Matematika 2#2#6 @ Fizika 2#2#6 @ Osnovi na injenernoto proektirane 2#2#4 @
我尝试过:
Pattern pattern1 = Pattern.compile("(.+)[@]+");
Pattern pattern2 = Pattern.compile("((.+)[#]+(\\d)[#]+(\\d)[@])+");
Matcher matcher1 = pattern1.matcher("Matematika 1#1#0@Fizika 1#1#6@Osnovi na injenernoto proektirane 1#1#5@PIK 1#1#6@Matematika 2#2#6@Fizika 2#2#6@Osnovi na injenernoto proektirane 2#2#4@");
Matcher matcher2 = pattern2.matcher("Matematika 1#1#0@Fizika 1#1#6@Osnovi na injenernoto proektirane 1#1#5@PIK 1#1#6@Matematika 2#2#6@Fizika 2#2#6@Osnovi na injenernoto proektirane 2#2#4@");
while(matcher1.find()){
System.out.println(matcher1.group(1));
while (matcher2.find()){
System.out.println(matcher2.group(1) + "\t");
System.out.println(matcher2.group(1) + "\t");
System.out.println(matcher2.group(1) + "\t");
}
}
但它没有成功。 " PATTERN2"工作正常,但只有当源字符串是:" Matematika 1#1#0 @" ....这导致了两个匹配器的想法。一个用于将字符串分成小字符串,第二个用于获取信息。
我很高兴听到任何想法,我怎么能做到。
提前致谢。
答案 0 :(得分:1)
您可以这样做,使用后视和前瞻断言来定位您的主题和数字组,然后使用匹配组为每个匹配提取单个部分:
Pattern p = Pattern.compile("(?=[^@])(.+?)#(\\d)#(\\d)(?=@)");
Matcher m = p.matcher("Matematika 1#1#0@Fizika 1#1#6@Osnovi na injenernoto proektirane 1#1#5@PIK 1#1#6@Matematika 2#2#6@Fizika 2#2#6@Osnovi na injenernoto proektirane 2#2#4@");
while(m.find())
{
if (m.groupCount() == 3) {
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
}
}