6
votes

Déterminer si une phrase contient un mot spécifique

Je veux savoir comment se référer à un mot d'une phrase dans une étiquette. Par exemple, j'ai: xxx

Je veux dire: "si label1.text contient le mot" stylo "puis faire quelque chose" : < Pré> xxx

Comment puis-je faire cela?


1 commentaires

+1 simplement parce qu'il semble y avoir de nombreuses idées fausses sur la façon de résoudre ce problème ...


6 Réponses :


2
votes

Vous pouvez utiliser string.split () pour séparer ce texte en jetons et Array.Contains pour vérifier si le mot est dans la liste.

string sentence = "books pencil pen ruler";
string[] words = sentence.Split(' ');
bool hasFox = words.Contains("pen");


2 commentaires

Et ça "j'ai un stylo. Sa couleur est noire."


Comme mentionné dans la réponse ... Si vous voulez plus de délimiteurs de mots à part '', ajoutez-les à Split E.G. Split ('', '\ t', '.', ',') ... J'ai suscité @tim S. Parce que sa réponse traite de cette question plus compacte.



0
votes

Si le mot de stylo est attendu entre les mots et non dans le début ou la fin de la chaîne.

if (Regex.IsMatch(label1.Text, @"\bpen\b"))
{
 //do something
}


9 commentaires

Qui correspond également à ouvert :-)


Omet de faire correspondre "stylo bla bla bla"


Yup ça va bien :) Dans ce cas, il n'y aura pas de "bla bla bla stylo", donc tout va bien. Merci :)


Si le texte d'entrée est "BLA BLA BLA PEN", comment l'index de ("stylo") trouve-t-il le "stylo"? Il retournera -1.


Dans mon cas, il n'y aura pas les mêmes mots dans la chaîne. Tous les mots seront différents. Donc ça va


Je ne pense pas que l'OP ait littéralement toujours voulu correspondre à cette chaîne d'entrée (sinon, il pourrait certainement avoir du mal à coder la réponse). Votre réponse échoue si le texte recherché est le dernier mot d'une phrase.


Et maintenant, avec la dernière modification, vous correspondez à nouveau à une fois de manière incorrecte Ouvrir avec || Label1.text.indexof ("stylo")


Oui, j'ai besoin de quelque chose d'autre pour le rendre générique


Quelque chose comme fractionnement sur les limites de mot, que ma réponse et @tim S. font correctement.



0
votes

ESSAYER -

if(label1.text.contains(" pen ")) 
     {
         //do something 
     }


2 commentaires

Ajoutez simplement de l'espace avant et après .


Maintenant, essayez de faire correspondre «Bla Bla Bla Stylo». Cela ne contient pas de "stylo".



13
votes

Utilisez les frontières du mot Regex:

if (Regex.IsMatch(label1.text, @"\bpen\b"))
    // do something


1 commentaires

Eh bien, je suis d'accord avec le fait que l'index de réponses sont fausses :-) Mais ce n'est pas nécessairement plus robuste que de fractionnement sur des jetons de limites de mots (bien que c'est certainement une solution plus courte, donc +1 pour cela :-).



0
votes
string s1 = "books pencil pen ruler";
string s2 = "pen";
if(s1.Contains(s2) && s2 != "")
{
// do something
}

1 commentaires

Ah, je vois ce que vous essayez de dire. Eh bien, j'essayais simplement d'éviter d'utiliser un tableau de cordes. Je suppose que c'est juste à la hauteur de l'OP de choisir en fonction de l'exigence.



0
votes

Cela devrait aider xxx


1 commentaires

Avez-vous lu l'une des autres réponses et commentaires sur les autres réponses? Votre réponse duplique plusieurs réponses existantes et ne va pas pour des raisons similaires.