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.

14voto

Seamus Campbell Punkte 17568

Sie müssen mit den Elementen von a iterieren.

a = ['a', 'b', 'c']
str = "a123"
found_a_string = False
for item in a:    
    if item in str:
        found_a_string = True

if found_a_string:
    print "found a match"
else:
    print "no match found"

4voto

Domi W Punkte 545

Jbernadas erwähnte bereits die Aho-Corasick-Algorithmus um die Komplexität zu verringern.

Hier ist eine Möglichkeit, sie in Python zu verwenden:

  1. Laden Sie aho_corasick.py herunter von ici

  2. Legen Sie sie in dasselbe Verzeichnis wie Ihre Haupt-Python-Datei und nennen Sie sie aho_corasick.py

  3. Versuchen Sie den Algorithmus mit dem folgenden Code:

    from aho_corasick import aho_corasick #(string, keywords)
    
    print(aho_corasick(string, ["keyword1", "keyword2"]))

Beachten Sie, dass die Suche Groß- und Kleinschreibung

4voto

balki Punkte 24248

Le site regex modul empfohlen in python docs unterstützt dies

words = {'he', 'or', 'low'}
p = regex.compile(r"\L<name>", name=words)
m = p.findall('helloworld')
print(m)

Ausgabe:

['he', 'low', 'or']

Einige Details zur Umsetzung: lien

3voto

mluebke Punkte 8100
a = ['a', 'b', 'c']
str =  "a123"

a_match = [True for match in a if match in str]

if True in a_match:
  print "some of the strings found in str"
else:
  print "no strings found in str"

3voto

Jerald Cogswell Punkte 61

Eine kompakte Möglichkeit, mehrere Zeichenketten in einer anderen Liste von Zeichenketten zu finden, ist die Verwendung von set.intersection. Dies geht viel schneller als das Listenverständnis in großen Mengen oder Listen.

>>> astring = ['abc','def','ghi','jkl','mno']
>>> bstring = ['def', 'jkl']
>>> a_set = set(astring)  # convert list to set
>>> b_set = set(bstring)
>>> matches = a_set.intersection(b_set)
>>> matches
{'def', 'jkl'}
>>> list(matches) # if you want a list instead of a set
['def', 'jkl']
>>>

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