Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
divers_expr_reg [2008/12/11 14:04] tyrtamos |
divers_expr_reg [2008/12/11 18:37] tyrtamos |
||
---|---|---|---|
Ligne 93: | Ligne 93: | ||
</ | </ | ||
- | Il est bien sûr possible de simplifier les 2 premières options (qui deviennent: " | + | Mais, en fait, l' |
+ | |||
+ | <code python> | ||
+ | motif = r"^[+-]?((([0-9]+(\.[0-9]*)? | ||
+ | </ | ||
+ | |||
+ | Sa lecture est plus complexe, et on peut mieux la comprendre avec l'indentation: | ||
+ | |||
+ | < | ||
+ | ^ | ||
+ | [+-]? | ||
+ | ( | ||
+ | ( | ||
+ | ([0-9]+(\.[0-9]*)? | ||
+ | | | ||
+ | (\.[0-9]+) | ||
+ | ) | ||
+ | ([eE][+-]? | ||
+ | ) | ||
+ | $ | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | * si je veux limiter mes nombres à des nombres entiers ou réels mais sans exposant, il suffit de supprimer | ||
+ | |||
+ | * si en plus je veux reconnaître des nombres écrits en français (avec la virgule), il suffit que je remplace le point par une virgule dans le motif. | ||
+ | |||
+ | \\ | ||
+ | Et voilà une fonction qui, à partir d'une chaine, renvoie un entier, un entier long, un flottant ou False (d' | ||
+ | |||
+ | <code python> | ||
+ | def numbereval(x): | ||
+ | if re.match(r" | ||
+ | if x!="" | ||
+ | return long(x[: | ||
+ | else: | ||
+ | return int(x) | ||
+ | elif re.match(r" | ||
+ | return float(x) | ||
+ | else: | ||
+ | return False | ||
+ | </ | ||
+ | |||
+ | Cette fonction détecte un entier long de 2 façon différentes: | ||
+ | |||
+ | * si l' | ||
+ | |||
+ | * si l' | ||
+ | |||
+ | Et voilà le code pour le tester: | ||
+ | |||
+ | <code python> | ||
+ | while True: | ||
+ | y = numbereval(raw_input(' | ||
+ | if y: | ||
+ | print type(y), y | ||
+ | else: | ||
+ | print u"ce n'est pas un nombre" | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | Amusez-vous bien! | ||
< | < |