Seite 1 von 1

re.match-object als Bedingung verwenden?

Verfasst: Dienstag 27. November 2012, 10:28
von mutetella
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...

Re: re.match-object als Bedingung verwenden?

Verfasst: Dienstag 27. November 2012, 10:37
von 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]):
    # ...