如何从重复模式的字符串中获取信息?

时间:2014-04-16 20:46:28

标签: java regex string

你好我想从一个带有重复模式的字符串中获取信息。 例如:

  

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 @" ....这导致了两个匹配器的想法。一个用于将字符串分成小字符串,第二个用于获取信息。

我很高兴听到任何想法,我怎么能做到。

提前致谢。

1 个答案:

答案 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));
   }
}