2012-06-26 4 views
0

Par exemple, j'ai liste des textes qui chaque texte ressemble à quelque chose comme ceci:Comment rechercher une phrase dans un texte en C#?

Nous préférons des questions auxquelles on peut répondre, non seulement discuté. Fournir des détails . Partagez votre research.If votre question sur ce site

et je veux rechercher can be answered dans la liste des textes et renvoyer le texte ci-dessus comme un texte qui a can be answered. Comment dois-je faire cela?

J'ai essayé Contains() mais il ne retourne rien. Mon code ressemble à ceci:

IEnumerable<App_ProjectTask> temp; 
if (!String.IsNullOrEmpty(query)) 
{ 
    temp = dc.App_ProjectTasks.Where(x => x.Title.Contains(query) || x.Description.Contains(query)); 
    if (temp.Count() > 0) 
    { 
     results = temp.ToList(); 
    } 
} 
+0

affichage du code aiderait – Mangist

+0

Montrez votre code pour votre test en cours s'il vous plaît .. Contient répondra oui/non si la correspondance exacte est trouvée. – BugFinder

+2

Je pense que vous voulez la fonction SubString - http://www.dotnetperls.com/substring – JMK

Répondre

0

Cela fonctionne pour moi: ce qui est essentiellement ce que vous avez fait, mais je montre ma classe ..

private void WriteLine(String text) 
    { 
     textBox1.Text += text + Environment.NewLine; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     List<TestClass> list = new List<TestClass>(); 

     list.Add(new TestClass { Title = "101 unanswered questions", Description = "There are many questions which go unanswered, here are our top 1001" }); 
     list.Add(new TestClass { Title = "Best of lifes questions", Description = "Many of lifes questions answered" }); 
     list.Add(new TestClass { Title = "Top 10 smart answers", Description = "Top 10 smart answers for common interview questions" }); 

     var results = 
      list.Where(x => x.Description.Contains("answered questions") | x.Title.Contains("answered questions")); 
     foreach (TestClass res in results) 
     { 
      WriteLine(String.Format("Title: {0}, Desc: {1}", res.Title, res.Description)); 
     } 
    } 
} 

public class TestClass 
{ 
    public String Title; 
    public String Description; 
    public String Contents; 

    public TestClass() 
    { 
     Title = ""; 
     Description = ""; 
     Contents = ""; 
    } 
} 
3

Le contenu devrait fonctionner.

+0

Posté cela avant de mettre le code dans la question. – psych

+0

Je voudrais ajouter un couple de ToLowers(), ou créer une extension pour ContainsIgnoreCase() – Ketchup

+0

Dépend si hes cherche des phrases qui peut-être dans plus de 1 ligne et veut toutes les lignes – BugFinder

4
String text = "We prefer questions that can be answered, "+ 
       "not just discussed.Provide details. Share your research."+ 
       "If your question is about this website"; 
if (text.Contains("can be answered")) 
{ 
    Console.WriteLine("Text found"); 
} 

Les sorties code ci-dessus Text found.

Pour obtenir tous les String s qui ont le texte quelque chose comme ça:

var query = 
    from text in yourListOfTexts 
    where text.Contains("can be answered") 
    select text; 
+1

Je voudrais ajouter un couple de ToLowers(), ou créer une extension pour ContainsIgnoreCase() – Ketchup

+2

@Ketchup Vous supposez que l'OP veut ignorer le cas. – NominSim

+0

@NominSim Mais cela fait sens d'ignorer le cas ... donc c'est un bon point de mentionner comment éviter l'affaire. –

-1

Essayez:

IEnumerable<App_ProjectTask> temp; 
if (!String.IsNullOrEmpty(query)) 
{ 
temp = dc.App_ProjectTasks.Where(x => x.Title.ToLower().Contains(query.ToLower()) || x.Description.ToLower().Contains(query.ToLower())); 
if (temp.Count() > 0) 
{ 
    results = temp.ToList(); 
} 
} 
0

Il y a quelques mentions de l'utilisation ToLower() pour la méthode contient Pour des performances, vous devez utiliser string.IndoexOf (« string », StringComparison.OrdinalIgnoreCase)

qui est si l'OP a besoin de sa recherche pour être insensible à la casse

Case insensitive 'Contains(string)'

Questions connexes