2010-10-08 11 views
1

J'essaie de créer une fonction qui divisera une chaîne en termes de recherche. En utilisant ce code fonctionne très bien:Scinder les chaînes de manière "Google"

string TestString = "This is a test"; 
string[] Terms; 
Terms = TestString.Split(" "); 

Cela partagerai mon string en 4 cordes: "Ce", "est", "un", "test". Cependant, je veux des mots qui sont entre guillemets à traiter comme un seul mot:

string TestString = "This \"test will\" fail"; 
string[] Terms; 
Terms = TestString.Split(" "); 

Cela diviser ma chaîne en 4 cordes, encore une fois: « Ce », « \ » test « « va \ » » , « échec »

ce que je veux est pour cela divisé cette dernière chaîne en seulement 3 chaînes: « ce », « test », « fail »

quelqu'un a une idée sur la façon de le faire?

Répondre

3

Essayez d'utiliser un Regex:

var testString = "This \"test will\" fail"; 
var termsMatches = Regex.Matches(testString, "(\\w+)|\"([\\w ]+[^ ])\""); 
+0

Pour un crédit supplémentaire: obtenir le regex pour gérer les citations incorporées dans la partie citée. Votre choix de la façon d'échapper les guillemets intégrés - en utilisant '\\', en doublant les guillemets, ou un autre mécanisme. Mais les guillemets simples doivent aussi être intégrables (comme les antislashs). –