Je veux écrire le modèle de regex par la fonction DEF permet de le nommer is_number (string), qui vérifie si la chaîne est entière de la plage de -49 à 49. Le numéro ne doit également pas contenir des zéros insignifiants.
Donc je veux passer un test : P>
def is_number(string):
pattern = r'[-]?\d[1,4]{1,2}*'
return re.search(pattern, string)
4 Réponses :
Essayez ce motif de regex,
^[-]?[0-4]?\d$
Cela correspond aux parties du nombre également et non seulement avec le nombre total - vous aurez besoin des symboles ^ et $ pour vous assurer d'attraper le nombre entier.
pattern = r'^-?[0-4]?\d$' Try out this regex pattern
Cela ne correspond pas à des nombres à un chiffre à un chiffre comme -9
Le motif correspond à
regex: p> Pour remplir la plage de 49 sur Négative 49, vos tests doivent réellement ressembler à ceci: P> self.assertFalse(is_number("50")) # 50 must be assertFalse
self.assertFalse(is_number("-50")) # -50 must be assertFalse
self.assertTrue(is_number("-9"))
self.assertTrue(is_number("7")) # 7 must be assertTrue
self.assertFalse(is_number("-200"))
self.assertTrue(is_number("-21"))
self.assertTrue(is_number("18"))
self.assertTrue(is_number("0"))
self.assertTrue(is_number("49"))
self.assertFalse(is_number("100"))
self.assertTrue(is_number("-49"))
il ne passe pas la 1ère affirmation - cela serait si affirmée serait assertfalse
"" Si la chaîne est entière de la plage de -49 à 49 "". Pourquoi essayez-vous d'affirmer à 50 et -50 s'il est en dehors de votre plage spécifiée?
Spécification de la tâche - devez tous les compléter
Ensuite, la spécification de votre tâche est fausse. 50 et -50 ne peuvent pas affirmer que votre gamme est de -49 à 49.
Disons que nous n'avons pas de Self.AssertTtrue (IS_NOMBER ("50")). Regex ne passe pas sur Self.Assertfalse (IS_NOMBER ("7")). Peut-être que ce devrait être la négation d'un modèle entier?
Les trois tests avec les nombres 50, -50 et 7 sont codés "faux" si votre plage est censée être 49 à la négative 49. Le reste est logiquement en ligne avec la plage donnée.
Vous pouvez utiliser correspondant à p> Démo Regex P> Si vous voulez aussi Pour correspondre 50 et -50 et 7 ne doivent pas correspondre à vous permettre d'ajouter 50 à l'alternance et des chiffres de correspondance 0-6, 8 et 9 à l'aide de P>
^ code> début de chaîne li>
-? code> en option - code> li>
(?: code> groupe non capturant
[0-9] code> correspond à un chiffre 0-9 LI>
| code> ou li>
[1-4] [0-9] code> correspond à un chiffre 1-4 et à un chiffre 0-9 pour correspondre à une plage 10 - 49 li>
ul> li>
) code> close group li>
$ code> fin de chaîne li>
ul> ^-?(?:[0-689]|[1-4][0-9]|50)$
Correspondant à 50 et -50 aussi bien changerait la gamme de nombres valides si ...
C'est correct, seulement dans la question là-bas est self.asserttrue (is_number ("50")) Self.AssertTtrue (is_number ("- 50")) code>
Je voudrais toujours faire un cas pour que le test soit faux au lieu d'essayer de changer ce que la fonction accepte en général;)
Votre motif passe jusqu'à Self.AssertFalse (is_température ("7"))
@jptak n'est pas sûr de ce que vous entendez par là? Je pense que cela correspond à toutes vos exigences.
Le test est faux ... il veut affalcer de 7 minutes tandis que 7 se trouve dans la plage spécifiée. Même avec les deux premiers affirmations.
@Cribber je vois, le motif est donc correct mais le test est faux.
Je l'ai adopté tout test, attendez-vous - Self.AssertFalse (is_température ("7"). Cela fonctionnerait si ce serait Self.AssertTtrue (is_tempperature ("7").
@JPTAK devrait-il faire correspondre 50, -50 et 7 ou si elles ne correspondent pas? Ou bien le motif serait ^ -? (?:: [0-689] | [1-4] [0-9]) $ code> REGEX101.com/R/3VOM3M/1
@Thefourthbird 50 et -50 devraient correspondre, mais 7 ne devrait pas (cus son asserfalse). Je n'ai pas commis d'erreur avec des tests d'écriture - les tests sont Copy-coller TBH pour être résolu.
@JPTAK, alors tout le test réussira à l'aide de ce modèle ^ -? (?: [0-689] | [1-4] [0-9] | 50) $ code> REGEX101.com/R/17LUAQ/1
Ce n'est pas ce que vous demandez, mais pourquoi ne vous converties-vous pas simplement la chaîne en un entier, puis assurez-vous que le nombre est dans la plage correcte en utilisant des opérateurs de comparaison?
Je dois juste utiliser regex
Les deux premiers asserts devraient être asserfalse si votre gamme est de -49 à +49.