Seite 1 von 1

regex mit variablem Parameter

Verfasst: Freitag 15. Februar 2019, 09:07
von pauledd
Hi

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

Code: Alles auswählen

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)
wenn ich das so ausführe bekomme ich:

Code: Alles auswählen

1,"
3,$
Die Eins stimmt ja, aber warum gibt er noch das Dollarzeichen aus?

Re: regex mit variablem Parameter

Verfasst: Freitag 15. Februar 2019, 09:19
von sparrow
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.

Re: regex mit variablem Parameter

Verfasst: Freitag 15. Februar 2019, 09:29
von Sirius3
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.

Re: regex mit variablem Parameter

Verfasst: Freitag 15. Februar 2019, 09:53
von pauledd
Okay, danke, ich versuche es mal selbst mit euren Tips hinzubekommen.

Re: regex mit variablem Parameter

Verfasst: Freitag 15. Februar 2019, 10:02
von pauledd
So klappts erstmal:

Code: Alles auswählen

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)

Code: Alles auswählen

0,!
3,$