2014-04-16 1 views
1

Bonjour Je veux obtenir des informations à partir d'une chaîne avec motif répétitif en elle. Par exemple:Comment obtenir des informations à partir d'une chaîne avec un motif répété?

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 proektirane 2 # 2 # 4 @

J'ai essayé avec:

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"); 
     } 

    } 

mais ça ne fonctionnait pas. "pattern2" fonctionne bien, mais seulement si la chaîne source est: "Matematika 1 # 1 # 0 @" .... Cela a conduit à l'idée de deux matchers. Un pour diviser la chaîne en petites chaînes, et le second pour obtenir l'info.

Je serai heureux d'entendre toutes sortes d'idées, sur la façon dont je peux le faire.

Merci d'avance.

+1

est une chaîne. partager une option? – oschlueter

+0

Plutôt pas. Je dois sauvegarder les données de la chaîne dans un tableau bidimensionnel et je ne pense pas que ce serait vraiment pratique de créer des tableaux avec split et de les placer dans mon tableau. – Altair

+0

Que voulez-vous exactement de cette chaîne? – Szymon

Répondre

1

Vous pouvez le faire de cette façon, à l'aide regarder en arrière et d'anticipation assertions pour localiser vos groupes de sujet et numéros, puis utiliser les groupes correspondant à extraire des parties individuelles pour chaque match:

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

Merci beaucoup. – Altair

Questions connexes