2014-04-16 31 views
1

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

Matematika 1#1#0 @ FIZIKA 1#1#6 @ Osnovi呐injenernoto proektirane 1#1#5 @ PIK 1#1#6 @ Matematika 2#2#6 @ FIZIKA 2 #2#6 @ Osnovi呐injenernoto proektirane 2#2#4 @

我试着用:

Pattern pattern1 = Pattern.compile("(.+)[@]+"); 
    Pattern pattern2 = Pattern.compile("((.+)[#]+(\\d)[#]+(\\d)[@])+"); 
    Matcher matcher1 = pattern1.matcher("Matematika 1#1#[email protected] 1#1#[email protected] na injenernoto proektirane 1#1#[email protected] 1#1#[email protected] 2#2#[email protected] 2#2#[email protected] na injenernoto proektirane 2#2#[email protected]"); 
    Matcher matcher2 = pattern2.matcher("Matematika 1#1#[email protected] 1#1#[email protected] na injenernoto proektirane 1#1#[email protected] 1#1#[email protected] 2#2#[email protected] 2#2#[email protected] na injenernoto proektirane 2#2#[email protected]"); 


    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

为String。拆分选项? – oschlueter

+0

而不是。我必须将字符串中的数据保存在二维数组中,我认为用split创建数组并将它们放入数组中并不实际。 – Altair

+0

你想从这个字符串得到什么? – Szymon

回答

1

你能做到这样,使用向后看和前瞻断言找到你的主题和数字的组,然后使用匹配的组来提取各个部分的每场比赛:

Pattern p = Pattern.compile("(?=[^@])(.+?)#(\\d)#(\\d)([email protected])"); 
Matcher m = p.matcher("Matematika 1#1#[email protected] 1#1#[email protected] na injenernoto proektirane 1#1#[email protected] 1#1#[email protected] 2#2#[email protected] 2#2#[email protected] na injenernoto proektirane 2#2#[email protected]"); 
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)); 
    } 
} 
+1

非常感谢。 – Altair

相关问题