wake-up-neo.net

Überprüfen Sie, ob in einer anderen Zeichenfolge mehrere Zeichenfolgen vorhanden sind

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

Mögen:

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 zeigt nur, was ich erreichen möchte.

274
jahmax

Sie können any verwenden:

if any(x in str for x in a):

Um zu überprüfen, ob all die Zeichenfolgen aus der Liste gefunden werden, verwenden Sie all anstelle von any.

537
Mark Byers

any() ist bei weitem der beste Ansatz, wenn Sie nur True oder False wünschen. Wenn Sie jedoch genau wissen möchten, welche Zeichenfolge (n) übereinstimmen, können Sie einige Dinge verwenden.

Wenn Sie die erste Übereinstimmung wünschen (mit False als Standard):

match = next((x for x in a if x in str), False)

Wenn Sie alle Übereinstimmungen (einschließlich Duplikate) erhalten möchten:

matches = [x for x in a if x in str]

Wenn Sie alle nicht doppelten Übereinstimmungen erhalten möchten (Reihenfolge nicht beachtet):

matches = {x for x in a if x in str}

Wenn Sie alle nicht doppelten Übereinstimmungen in der richtigen Reihenfolge erhalten möchten:

matches = []
for x in a:
    if x in str and x not in matches:
        matches.append(x)
48
zondo

Sie sollten vorsichtig sein, wenn die Zeichenfolgen in a oder str länger werden. Die einfachen Lösungen nehmen O (S * (A ^ 2)) an, wobei S die Länge von str ist und A die Summe der Längen aller Strings in a ist. Um eine schnellere Lösung zu finden, sehen Sie den Algorithmus Aho-Corasick für den String-Abgleich, der in linearer Zeit O (S + A) läuft.

37
jbernadas

Um nur etwas Vielfalt mitregexhinzuzufügen:

import re

if any(re.findall(r'a|b|c', str, re.IGNORECASE)):
    print 'possible matches thanks to regex'
else:
    print 'no matches'

oder wenn Ihre Liste zu lang ist - any(re.findall(r'|'.join(a), str, re.IGNORECASE))

14
jetpackdata.com

Sie müssen die Elemente von a durchlaufen.

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"
7
Seamus Campbell
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"
3
mluebke

jbernadas erwähnte bereits den Aho-Corasick-Algorithmus , um die Komplexität zu reduzieren.

Es gibt eine Möglichkeit, es in Python zu verwenden:

  1. Laden Sie aho_corasick.py von hier

  2. Legen Sie es in das gleiche Verzeichnis wie Ihre Python-Hauptdatei und nennen Sie es aho_corasick.py.

  3. Versuchen Sie den Alrorithmus mit dem folgenden Code:

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

Beachten Sie, dass die Suche Groß-/Kleinschreibung ist.

2
Domi W

Es hängt vom Kontext ab Angenommen, Sie möchten einzelne Literale wie (ein einzelnes Wort a, e, w, .. usw.) in reicht aus

original_Word ="hackerearcth"
for 'h' in original_Word:
      print("YES")

wenn Sie eines der Zeichen unter dem ursprünglichen_Wort prüfen möchten: verwenden Sie 

if any(your_required in yourinput for your_required in original_Word ):

wenn Sie alle Eingaben, die Sie in diesem ursprünglichen_Wort wünschen, verwenden möchten, verwenden Sie all simple

original_Word = ['h', 'a', 'c', 'k', 'e', 'r', 'e', 'a', 'r', 't', 'h']
yourinput = str(input()).lower()
if all(requested_Word in yourinput for requested_Word in original_Word):
    print("yes")
1
Trinadh Koya

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

def check_string(string, substring_list):
    for substring in substring_list:
        if substring in string:
            return True
    return False
0
Ivan Mikhailov
data = "firstName and favoriteFood"
mandatory_fields = ['firstName', 'lastName', 'age']


# for each
for field in mandatory_fields:
    if field not in data:
        print("Error, missing req field {0}".format(field));

# still fine, multiple if statements
if ('firstName' not in data or 
    'lastName' not in data or
    'age' not in data):
    print("Error, missing a req field");

# not very readable, list comprehension
missing_fields = [x for x in mandatory_fields if x not in data]
if (len(missing_fields)>0):
    print("Error, missing fields {0}".format(", ".join(missing_fields)));
0
Robert I
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

0
LeftSpace

Weitere Informationen dazu, wie Sie alle in String verfügbaren Listenelemente erhalten

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

Ein überraschend schneller Ansatz ist die Verwendung von set:

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

Dies funktioniert, wenn a keine Werte mit mehreren Zeichen enthält (in diesem Fall verwenden Sie any wie in oben aufgeführt). In diesem Fall ist es einfacher, a als Zeichenfolge anzugeben: a = 'abc'.

0
Berislav Lopac