2009-12-17 6 views
0

Je voudrais utiliser l'expression régulière pour identifier certains mots d'une chaîne.VS2008 C#: Expression régulière et identification de certains mots

Par exemple:

"bla bla bla | First Name = John Doe | City = Denver | bla bla bla | State = CA | bla bla bla" 

Dans la chaîne ci-dessus, qui est | délimité pour les mots, je veux analyser le contenu du prénom, la ville et l'état et les stocker où comme dans une table de hachage.

Comment puis-je faire cela? Je pense que le meilleur moyen serait d'utiliser l'expression régulière.

+0

Mais alors comment je serais en mesure de saisir la paire clé-valeur telle que City, State, FirstName etc. –

Répondre

0

J'utiliserais string.Split ('|') et string.IndexOf ("=") pour analyser les éléments. Ce serait certainement plus simple que regex.

0

Si vos données sont cohérentes (c'est-à-dire qu'elles utilisent toujours les délimiteurs | et = comme), vous pouvez utiliser la méthode de division de chaîne pour obtenir des résultats dans un tableau.

4

Ne serait-il pas plus facile de simplement utiliser split?

Exemple:

var test = "bla bla bla | First Name = John Doe | City = Denver | bla bla bla | State = CA | bla bla bla"; 
var sections = test.Split('|'); 
var firstName = sections[1].Split('=')[1].Trim(); 
var city= sections[2].Split('=')[1].Trim(); 
var state= sections[4].Split('=')[1].Trim(); 
1

Utilisez la fonction Split():

public class SplitTest { 
    public static void Main() { 

     string words = "This is a list of words, with: a bit of punctuation" + 
         "\tand a tab character."; 

     string [] split = words.Split(new Char [] {' ', ',', '.', ':', '\t' }); 

     foreach (string s in split) { 

      if (s.Trim() != "") 
       Console.WriteLine(s); 
     } 
    } 
} 
// The example displays the following output to the console: 
//  This 
//  is 
//  a 
//  list 
//  of 
//  words 
//  with 
//  a 
//  bit 
//  of 
//  punctuation 
//  and 
//  a 
//  tab 
//  character 
1

Utilisation de groupes nommés est très simple ...

// named groups are very cool for this... 
    public static Regex regex = new Regex("\\|(?:\\s*)(?<key>(\\w+)(\\s*))=(?<value>[^|]+)", RegexOptions.CultureInvariant | RegexOptions.Compiled); 

    public static Dictionary<string, string> Extract(string line) 
    { 
     Dictionary<string, string> results = new Dictionary<string, string>();   
     foreach (Match match in regex.Matches(line)) 
     { 
      var groupKey = match.Groups["key"]; 
      var groupValue = match.Groups["value"]; 
      if (groupKey.Success && groupValue.Success) 
      { 
       // add the group value trimmed as we might have extra blank spaces 
       results[groupKey.Value.Trim()] = groupValue.Value.Trim(); 
      } 
     } 
     return results; 
    } 
Questions connexes