2009-11-07 7 views
1

Un peu coincé ici. J'ai une question simple, je suppose.Comment analyser/diviser cette ligne tout en gardant une note de la commande?

Compte tenu de l'entrée suivante:

content {c:comment comment}this is actual content{c:comment etc} content 

je besoin d'un moyen d'obtenir le contenu et les commentaires seperated, mais je dois maintenant l'ordre d'entre eux. Donc, une simple regex ne fonctionne pas.

Je veux obtenir ceci:

content 
{c:comment comment} 
this is actual content 
{c:comment etc} 
content 

Quelqu'un un indice?

+1

Tu ne peux pas remplacer "{" par "\ n {" et "}" par "} \ n"? – Artelius

+0

Je finirais avec une ligne vide blanche si le {c: comment} serait avant le premier contenu. – Peterdk

+0

Cela ne semble pas être un prix énorme. Vous pouvez couper cette ligne si vous le voulez vraiment, ou faire ignorer la regex^{ – Artelius

Répondre

0
string s = "content {c:comment comment}this is actual content{c:comment etc} content"; 
var split = Regex.Split(s, @"\{c:(?<comment>[^\}]*)\}"); 

REMARQUE: lorsque l'expression régulière d'une scission a une capture comme (?<comment> ) il obtient également de retour.

+0

Terminé avec: Liste Regex.Split (entrée "{|}"). commentaires gardé le "c: ceci est un commentaire" "c:" afin que je puisse reconnaître si c'était un commentaire. Je n'ai pas pensé à Regex c'est la méthode Split. Donc cela a aidé. – Peterdk

0

L'expression (.*?)\s*{c:\s*(.*?)}\s* m'a donné une chaîne [] avec les éléments: 'content', 'comment comment', 'this is actual content', 'comment etc', 'content'

Peut-être que proche de ce que vous cherchez.

2

Comme Artelius suggéré:

Regex.Replace(
Regex.Replace(input, "({)", @"\r\n$1"), 
        "(})", @"$1\r\n"); 
+0

Non, parce que vous voulez un saut de ligne AVANT {mais APRES}. – Artelius

+0

vous avez raison, réparé –

Questions connexes