re.match-object als Bedingung verwenden?

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.
Antworten
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Guten morgen,

ich möchte sys.argv darauf überprüfen, ob das erste Element mit einem '-' und einer oder mehrerer Zahlen beginnt, siehe argparse Eintrag.

Ich habe das nun folgendermaßen gelöst, bin mir aber nicht sicher ob
  1. die regex richtig definiert ist und
  2. die 'if match-object'-Bedingung so stehen kann.

Code: Alles auswählen

>>> def preparse_args(args):
...     if not re.match('-\d', args[0]) is None:
...         args.insert(0, '--')
...     return args
...
>>> args = preparse_args(['-1', 'foo'])
>>> args
['--', '-1', 'foo']
mutetella


EDIT: Oh Mann, sorry.... ich hab' das hier vor lauter HirrliWirrli nicht gescheit gelesen...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@mutetella: Der reguläre Audruck passt nicht zu Deiner Spezifikation. '\d' trifft *ein* Ziffernzeichen. Wenn Du eins oder mehr haben möchtest, musst Du das auch sagen. Und wenn nach den Ziffern nichts mehr kommen darf, musst Du auch das angeben. Also insgesamt r'-\d+$'. Ich habe das jetzt mal mit r davor geschrieben, weil das IMHO besserer Stil ist, wenn mindestens ein ``\`` in der Zeichenkette vorkommt, selbst wenn der nicht vor einem für Zeichenketten und ``\`` besonderen Zeichen steht.

Die Bedingung ist IMHO schwer zu lesen wenn man das ``not`` und das ``is`` getrennt anwendet, statt den ``is not``-Operator anzuwenden. Da `None` in diesem Kontext „falsch” und jedes `Match`-Objekt „wahr” ist, würde ich das aber komplett weglassen:

Code: Alles auswählen

if re.match(r'-\d+$', args[0]):
    # ...
Antworten