Wenn Sie exakte Übereinstimmungen von Wörtern wünschen, sollten Sie die Zielzeichenkette in Token umwandeln. Ich verwende das empfohlene word_tokenize von nltk :
from nltk.tokenize import word_tokenize
Hier ist die tokenisierte Zeichenfolge aus der akzeptierten Antwort:
a_string = "A string is more than its parts!"
tokens = word_tokenize(a_string)
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
Die akzeptierte Antwort wird wie folgt geändert:
matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
Wie in der akzeptierten Antwort wird das Wort "more" weiterhin gefunden. Wird jedoch "mo" zu einer übereinstimmenden Zeichenfolge, findet die akzeptierte Antwort immer noch eine Übereinstimmung. Das ist ein Verhalten, das ich nicht wollte.
matches_2 = ["mo", "wholesome", "milk"]
[x in a_string for x in matches_1]
Out[43]: [True, False, False]
Mit der Wort-Tokenisierung wird "mo" nicht mehr gefunden:
[x in tokens for x in matches_2]
Out[44]: [False, False, False]
Das ist das zusätzliche Verhalten, das ich wollte. Diese Antwort ist auch eine Antwort auf die doppelte Frage ici .