7 Stimmen

Überprüfung, ob eine Zeichenkette nicht mehrere Werte enthält

**Hinweis: Ich werde nicht nur am Ende einer Zeichenkette testen, sondern muss bestimmte Teilzeichenfolgen überall in der Zeichenkette auffinden.

Wie lässt sich am schnellsten überprüfen, ob eine Zeichenfolge nicht mehrere Werte enthält? Meine derzeitige Methode ist ineffizient und unpythonisch:

if string.find('png') ==-1 and sring.find('jpg') ==-1 and string.find('gif') == -1 and string.find('YouTube') == -1:

15voto

li.davidm Punkte 10755

Versuchen Sie es:

if not any(extension in string for extension in ('jpg', 'png', 'gif')):

der im Grunde dasselbe wie Ihr Code ist, aber eleganter geschrieben.

8voto

jcomeau_ictx Punkte 36287

Wenn Sie nur das Ende der Zeichenkette testen wollen, denken Sie daran, dass str.endswith ein Tupel akzeptieren kann.

>>> "test.png".endswith(('jpg', 'png', 'gif'))
True

sonst:

>>> import re
>>> re.compile('jpg|png|gif').search('testpng.txt')
<_sre.SRE_Match object at 0xb74a46e8>
>>> re.compile('jpg|png|gif').search('testpg.txt')

-4voto

Philip Southam Punkte 15165

So etwas könnte man auch machen, wenn die zu prüfenden Werte nicht durch ein Tupel/eine Liste verwaltet werden müssten.

>>> ('png' or 'jpg' or 'foo') in 'testpng.txt'
True
>>> ('png' or 'jpg' or 'foo') in 'testpg.txt'
False

EDIT Ich erkenne jetzt den Fehler, den ich begangen habe: Es wird nur das erste geprüft.

>>> ('bees' or 'png' or 'jpg' or 'foo') in 'testpng.txt'
False

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