Je travaille avec Python v2 et j'essaie de savoir si vous pouvez dire si un mot est dans une chaîne.
J'ai trouvé des informations sur l'identification du mot dans la chaîne - en utilisant .find, mais y a-t-il un moyen de faire une instruction IF. J'aimerais avoir quelque chose comme ce qui suit:
if string.find(word):
print 'success'
Merci pour toute aide.
mais gardez à l'esprit que cela correspond à une séquence de caractères, pas nécessairement à un mot entier - par exemple,
'word' in 'swordsmith'
est True. Si vous ne voulez faire correspondre que des mots entiers, vous devez utiliser des expressions régulières:la source
Si vous voulez savoir si un mot entier se trouve dans une liste de mots séparés par des espaces, utilisez simplement:
Cette méthode élégante est également la plus rapide. Par rapport aux approches de Hugh Bothwell et daSong:
Edit: Une légère variante de cette idée pour Python 3.6+, tout aussi rapide:
la source
contains_word("says", "Simon says: Don't use this answer")
find renvoie un entier représentant l'index de l'endroit où l'élément de recherche a été trouvé. S'il n'est pas trouvé, il renvoie -1.
la source
Vous pouvez diviser la chaîne en mots et vérifier la liste des résultats.
la source
Cette petite fonction compare tous les mots recherchés dans un texte donné. Si tous les mots de recherche se trouvent dans le texte, renvoie la longueur de la recherche ou
False
autre.Prend également en charge la recherche de chaînes Unicode.
usage:
la source
Si la correspondance d'une séquence de caractères n'est pas suffisante et que vous devez faire correspondre des mots entiers, voici une fonction simple qui fait le travail. Il ajoute essentiellement des espaces si nécessaire et recherche cela dans la chaîne:
Cela suppose que les virgules et autres ponctuations ont déjà été supprimées.
la source
Comme vous demandez un mot et non une chaîne, je voudrais vous présenter une solution qui n'est pas sensible aux préfixes / suffixes et ignore la casse:
Si vos mots peuvent contenir des caractères spéciaux d'expression régulière (tels que
+
), vous devezre.escape(word)
la source
Méthode avancée pour vérifier le mot exact, que nous devons trouver dans une longue chaîne:
la source
L'utilisation de regex est une solution, mais c'est trop compliqué dans ce cas.
Vous pouvez simplement diviser le texte en liste de mots. Utilisez la méthode split ( separator , num ) pour cela. Il renvoie une liste de tous les mots de la chaîne, en utilisant le séparateur comme séparateur. Si le séparateur n'est pas spécifié, il se divise sur tous les espaces (vous pouvez éventuellement limiter le nombre de divisions à num ).
Cela ne fonctionnera pas pour les chaînes avec des virgules, etc. Par exemple:
Si vous souhaitez également fractionner toutes les virgules, etc., utilisez un argument de séparation comme celui-ci:
la source
mystring.lower().split()
etword.lower()
je pense que c'est aussi plus rapide que l'exemple regex.Vous pouvez simplement ajouter un espace avant et après "mot".
De cette façon, il recherche l'espace avant et après "mot".
la source