Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Ich möchte in einem String (tmp) nach einer Liste von Char's (signals) suchen und bei einem match soll er
die Stelle in der Liste und den Char selbst ausgeben
import re
signals = ['!','"','#','$','%']
tmp = 'fg2c0"'
def find_sig(sig):
for i,j in enumerate(signals):
if re.search(j,sig):
print("{},{}".format(i,j))
find_sig(tmp)
Ich frage mich, ob es nicht sinnvoller wäre, einmal über die Zeichen von tmp zu iterieren, die signals in ein set (statt einer Liste) zu packen und dann zu schauen ob das Zeichen aus tmp in dem set enthalten ist.
Klingt schneller als das, was du hier mit regulären Ausdrücken tust.
Edit: Ah, ich sehe gerade, du brauchst die Stelle aus der Liste, nicht aus tmp. Trotzdem würde ich bei der Suche nach einem einzelnen Zeichen keine regulären Ausdrücke bemühen. Wenn du nur wissen willst, ob das Zeichen überhaupt irgendwo enthalten ist, tut es auch .find() (mit Position) auf dem String oder "in" (ohne Position).
Die Variablennamen laden übrigens zum raten ein. Wenn du in deinem Text erklären musst, was dein Code tut, weil die Variablen nur aus einem Buchstaben bestehen, weißt auch du in zwei Wochen nicht mehr, was du da tun wolltest.
Zuletzt geändert von sparrow am Freitag 15. Februar 2019, 09:36, insgesamt 2-mal geändert.
Eine Funktion, die `find_sig` heißt, läßt vermuten, dass sie ein Suchergebnis zurückliefert. Reguläre Ausdrücke sind in Deinem Fall falsch. Zum einen, weil Sonderzeichen interpretiert werden, und zum zweiten, weil ein einfaches `in` ausreichen würde. Wenn `signals` eine Konstante ist, schreibt man sie `SIGNALS`, falls nicht, muß sie ein Parameter von `find_sig` sein. `j` ist ein schlechter Name für ein Signal und `sig` ein schlechter für einen String der Signale enthält. `tmp` würde ich mit Temperatur in Verbindung bringen, passt aber irgendwie nicht.
SIGNALS = ['!','"','#','$','%']
TEXT = 'fg2c0!'
TEXT2 = 'fg2$c0'
def find_sig(input):
for num,sig in enumerate(SIGNALS):
if sig in input:
print("{},{}".format(num,sig))
find_sig(TEXT)
find_sig(TEXT2)