-1
votes

Modèle de regex pour passer des tests

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)


3 commentaires

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.


4 Réponses :


0
votes

Essayez ce motif de regex,

^[-]?[0-4]?\d$


1 commentaires

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.



0
votes
pattern = r'^-?[0-4]?\d$'
Try out this regex pattern

1 commentaires

Cela ne correspond pas à des nombres à un chiffre à un chiffre comme -9



1
votes

Le motif correspond à

  • Numéros à double chiffre avec 1, 2, 3 ou 4 (positif et négatif) li>
  • ou tout numéro de chiffre (positif et négatif) li> ul>

    regex: p> xxx pré>

    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"))
    


6 commentaires

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.



1
votes

Vous pouvez utiliser xxx pré>

correspondant à 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>

      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>

      ^-?(?:[0-689]|[1-4][0-9]|50)$
      


11 commentaires

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"))


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]) $ 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) $ REGEX101.com/R/17LUAQ/1