2016-07-22 20 views
-1

bitte helfen Sie mir mit diesem:regulären Ausdruck is_fraction: Python: regex

Ist Fraktion

eine Funktion is_fraction erstellen, die eine Zeichenfolge annimmt und gibt True zurück , wenn die Zeichenfolge einen Bruchteil darstellt.

nach unserer Definition eine Fraktion besteht aus:

Ein optionalen - Zeichen , gefolgt von 1 oder mehr Ziffern Gefolgt von einer/ , gefolgt von 1 oder mehr Ziffern, mindestens eines davon nicht Null ist (der Nenner kann nicht die Nummer 0) sein.

Tip

Ändern Sie die is_fraction Funktion im Validierungsmodul.

Ihre Funktion sollte wie folgt funktionieren:

>>> is_fraction("") 
False 
>>> is_fraction("5000") 
False 
>>> is_fraction("-999/1") 
True 
>>> is_fraction("+999/1") 
False 
>>> is_fraction("00/1") 
True 
>>> is_fraction("/5") 
False 
>>> is_fraction("5/0") 
False 
>>> is_fraction("5/010") 
True 
>>> is_fraction("5/105") 
True 
>>> is_fraction("5/1") 
False 

Dies ist, was ich bisher habe:

def is_fraction(string): 
    """Return True iff the string represents a valid fraction.""" 
    return bool(re.search(r'^-?[0-9]+\/[0-9]+$', string)) 
+0

Können Sie uns zeigen, was Sie bisher geschrieben haben? –

+0

ja bisher bin ich mit: def is_fraction (string): "" "Rückgabe True, wenn die Zeichenfolge einen gültigen Bruchteil darstellt." "" return bool (re.search (r '^ -? [0- 9] + \/[0-9] + $ ', string)) dies ist nicht wahr für; dividiere durch '0' ... :( –

Antwort

2

Recht, müssen Sie Ihre Nenner eine Folge von Ziffern sein, zumindest Einer davon ist nicht 0. Dies kann mit dem regex 0*[1-9][0-9]*

Ihre Validierungsmethode So, jetzt wird modelliert werden:

def is_fraction(string): 
    """Return True iff the string represents a valid fraction.""" 
    return bool(re.search(r'^-?[0-9]+/0*[1-9][0-9]*$', string)) 
+0

danke für die Hilfe :) sehr geschätzt. –

+1

Ich denke, eine bessere Regex wird 'r '^ -? [0-9] +/0 * [1-9] [0-9] * $'' - Es beinhaltet weniger Backtracking und beachten Sie, dass '/' nicht müssen in Python-Regex-Mustern maskiert werden. –

+0

@ WiktorStribiżew du hast Recht. Ich habe meine Antwort aktualisiert. Vielen Dank! –