2010-09-09 5 views
3

Je dispose d'un fichier texte qui est d'avoir des balises spéciales comme:utilisant des expressions régulières et des étiquettes pour extraire la partie du texte

{A1} 
Text 1 
{A1} 

{A2} 
Text 2 
{A2} 

Comment puis-je extraire du texte à l'aide reg-ex la partie Text 2 ou Text 1. ? Donc je ne sais quoi extraire que ce qui est entre les balises A1 ou seulement ce qui est entre balises A2 .. pas tous ... à la fois! merci!

+0

Les étiquettes spéciales peuvent-elles être imbriquées? –

+0

non ... toutes les étiquettes sont en ligne .... l'une après l'autre ... comme dans l'armée:) ... – Adrian

Répondre

1

En C#, vous pouvez faire quelque chose comme ceci:


string output = Regex.Replace(YOUR_TEXT, @"\{(?<Tag>\w+).*?\}(?<text>\w+).*?\{\k<Tag>\}", "$2"); 

Les étiquettes imbriquées ne sont pas suppoerted.

+0

Je dois extraire le texte pour ne pas le remplacer .... – Adrian

+0

Eh bien, si vous vérifieriez vous verriez qu'il renvoie du texte – Ventus

1

Vous pouvez le faire avec l'expression régulière suivante si vous supposez que le document est bien formé et que vos balises ne sont pas imbriqués:

@"({.*?})(.*)\1" 

Exemple:

Regex regex = new Regex(@"({.*?})(.*?)\1", RegexOptions.Singleline); 
foreach (Match match in regex.Matches(s)) { 
    Console.WriteLine(match.Groups[2].Value.Trim()); 
} 

Sortie:

 
Text 1 
Text 2 
+0

et si je n'ai besoin que du texte 1 ou seulement du texte 2 ..? – Adrian

Questions connexes