2017-02-25 2 views
3
String = "Alienshave just discovered a way to open cans" 
Arr=["Aliens","bird","cactus","John Cena"] 

if any(words in String for words in arr): 
     print String 

Dieses Skript zeigt Alienshave just discovered a way to open canseinen String Überprüfen Sie, ob es eine Zeichenfolge enthält, die

in einer Liste von Python, aber ich möchte nicht, dass es zu printString da das Wort Alienshave in String ist nicht genau das gleiche wie das Wort Aliens gefunden in Arr

Wie mache ich das, so dass die Basis für den Vergleich sind die Strings innerhalb eines Arrays und funktioniert nicht wie ein Platzhalter.

Antwort

4

Unter Verwendung reguläre Ausdrücke mit Wortgrenze (\b):

den leeren String, aber nur am Anfang oder Ende eines Wortes. Ein Wort ist definiert als eine Folge von alphanumerischen Unicodezeichen oder Unterstrichen Zeichen, so dass das Ende eines Wortes durch Whitespace oder ein nicht alphanumerisches, nicht unterstrichenes Unicode-Zeichen angezeigt wird. Beachten Sie, dass formell \b als Grenze zwischen \w und \W Zeichen (oder umgekehrt) definiert ist, oder zwischen \ w und Anfang/Ende der Zeichenfolge. Dies bedeutet, dass r'\bfoo\b' mit , 'foo.', '(foo)', 'bar foo baz', aber nicht 'foobar' oder 'foo3' übereinstimmt.


string = "Alienshave just discovered a way to open cans" 
arr = ["Aliens","bird","cactus","John Cena"] 

import re 
pattern = r'\b({})\b'.format('|'.join(arr)) # => \b(Aliens|bird|cactus|John Cena)\b 
if re.search(pattern, string): 
    print(string) 
# For the given `string`, above `re.search(..)` returns `None` -> no print 
+0

danke dafür, und für die Erklärung. :Daumen hoch: – Boneyflesh

0

verwendete ich String.split(), die die Zeichenfolge in Worte spaltet.

Verwandte Themen