655 Stimmen

Prüfen, ob mehrere Zeichenfolgen in einer anderen Zeichenfolge vorhanden sind

Wie kann ich überprüfen, ob eine der Zeichenfolgen in einem Array in einer anderen Zeichenfolge vorhanden ist?

Wie:

a = ['a', 'b', 'c']
str = "a123"
if a in str:
  print "some of the strings found in str"
else:
  print "no strings found in str"

Dieser Code funktioniert nicht, er soll nur zeigen, was ich erreichen will.

2voto

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 .

2voto

Nilesh Birari Punkte 873

Nur einige weitere Informationen darüber, wie man alle in String verfügbaren Listenelemente erhält

a = ['a', 'b', 'c']
str = "a123" 
list(filter(lambda x:  x in str, a))

1voto

sjd Punkte 1157

Eine weitere Lösung mit set. mit set.intersection . Für einen Einzeiler.

subset = {"some" ,"words"} 
text = "some words to be searched here"
if len(subset & set(text.split())) == len(subset):
   print("All values present in text")

if subset & set(text.split()):
   print("Atleast one values present in text")

1voto

Ivan Mikhailov Punkte 11

Ich würde diese Art von Funktion für die Geschwindigkeit verwenden:

def check_string(string, substring_list):
    for substring in substring_list:
        if substring in string:
            return True
    return False

1voto

LeftSpace Punkte 74
flog = open('test.txt', 'r')
flogLines = flog.readlines()
strlist = ['SUCCESS', 'Done','SUCCESSFUL']
res = False
for line in flogLines:
     for fstr in strlist:
         if line.find(fstr) != -1:
            print('found') 
            res = True

if res:
    print('res true')
else: 
    print('res false')

output example image

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X