2013-01-03 5 views
-5

Disons que j'ai un fichier texte avec la ligne ci-dessous en son sein. Je veux prendre les deux valeurs dans les citations en faisant correspondre entre ("et"), de sorte que je devrais récupérer ABC et DEF et les mettre dans une liste de chaînes ou quelque chose, quelle est la meilleure façon de faire cela? Il est si ennuyeuxMotif correspondant C#

Si EXAMPLEA (« ABC ») ET EXAMPLEB (« DEF »)

+2

Avez-vous essayé quelque chose? Je ne pense pas. S'il vous plaît lire [faq] et [demander] –

+0

Existe-t-il des variantes complexes aux chaînes possibles? Existe-t-il un mécanisme d'échappement (pour permettre par exemple à des caractères '' 'd'apparaître dans les chaînes)? –

+1

Vous avez mentionné regex dans les tags - c'est un bon moyen, essayez le! – Fischermaen

Répondre

0

En supposant un cas où la valeur entre les guillemets doubles ne peuvent pas contenir échappé guillemets doubles pourrait fonctionner comme ceci:

var text = "If EXAMPLEA(\"ABC\") AND EXAMPLEB(\"DEF\")"; 
Regex pattern = new Regex("\"[^\"]*\""); 

foreach (Match match in pattern.Matches(text)) 
{ 
    Console.WriteLine(match.Value.Trim('"')); 
} 

Mais ce n'est qu'une des nombreuses façons de le faire et peut-être pas le moyen le plus intelligent. Essayez quelque chose vous-même!

+0

en fait cela a fonctionné grand merci vous pour votre aide – user512628

0

... La meilleure façon

List<string> matches=Regex.Matches(File.ReadAllText(yourPath),"(?<="")[^""]*(?="")") 
          .Cast<Match>() 
          .Select(x=>x.Value) 
          .ToList(); 
0

Ce modèle devrait faire l'affaire:

\ "([^"] *) \ »

 string str = "If EXAMPLEA(\"ABC\") AND EXAMPLEB(\"DEF\")"; 
     MatchCollection matched = Regex.Matches(str, @"\""([^\""]*)\"""); 
     foreach (Match match in matched) 
     { 
      Console.WriteLine(match.Groups[1].Value); 
     } 

Notez que les guillemets sont doublés dans le code actuel afin de leur échapper et le code se réfère au groupe [1] pour obtenir juste la partie à l'intérieur des parenthèses

0
IEnumerable<string> matches = 
    from Match match 
    in Regex.Matches(File.ReadAllText(filepath), @"\""([^\""]*)\""") 
    select match.Groups[1].Value; 

D'autres déjà posté des réponses, mais mon prend en compte que vous voulez juste ABC et DEF dans votre exemple, sans guillemets et enregistrez-le dans un IEnumerable<string>.