Bonjour,
je bloque sur l'expression régulière : entier positif inférieur à 256.
J'ai réussi à faire de 0 à 255, mais je n'arrive pas a exclure le 0.
[10]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]
Merci pour votre aide.
Bonjour,
je bloque sur l'expression régulière : entier positif inférieur à 256.
J'ai réussi à faire de 0 à 255, mais je n'arrive pas a exclure le 0.
[10]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]
Merci pour votre aide.
Bonjour
J'ai testé ton expression et ce n'était pas trop mal mais je la trouve tout de même trop permissive.
Tu ne récupères pas de manière exacte un chiffre en 0 et 255, cela récupère des portions de numéro qui sont dans la limitation choisie, et c'est pourquoi le zéro est également accepté.
Je m'explique : avec le caractère ? tu rends optionnel le [10] et tu as fait suivre cela de [0-9]{1,2}, ce qui fait qu'en application : un nombre du type 0 est valide car ton ensemble de caractères est compris entre [0-9] et ait répété une OU deux fois. 0 respectant bien les limites ça passe.
C'est une idée de départ libre à toi de modifier et d'adapter cela selon tes besoins mais j'ai fait une expression régulière : ^([1-9]|0?[1-9][0-9]?|2[0-5]{2}|1[0-9]{2})$
Cette expression accepte les nombres de 1 à 255 et ceux en plusieurs formats : 01 011 111 025 255 mais le zéro n'est pas accepté ni le format en 001 il suffit de le rajouter si besoin est.
J'espère avoir pu aider !
Bonjour,
Ton expression régulière n'accepte pas tous les nombres entre 1 et 255. Par exemple, elle refuse 206.
En effet, si je lance le programme Python suivant :
Cela donne :
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import re regex_0_255 = re.compile('^([1-9]|0?[1-9][0-9]?|2[0-5]{2}|1[0-9]{2})$') exhaustive_expected_matches = map(str, range(0, 256)) some_expected_mismatches = ( *map(str, range(256, 1000)), *map(lambda n: '0' + str(n), range(0, 1000)) ) bad_mismatches = tuple(filter(lambda s: regex_0_255.match(s) is None, exhaustive_expected_matches)) bad_matches = tuple(filter(lambda s: regex_0_255.match(s) is not None, some_expected_mismatches)) if bad_mismatches: print(f'The following strings should match but they do not: {", ".join(bad_mismatches)}.') if bad_matches: print(f'The following strings should not match but they do: {", ".join(bad_matches)}.') if not(bad_mismatches) and not(bad_matches): print('OK')
Par contre, si j'écris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 The following strings should match but they do not: 0, 206, 207, 208, 209, 216, 217, 218, 219, 226, 227, 228, 229, 236, 237, 238, 239, 246, 247, 248, 249. The following strings should not match but they do: 01, 02, 03, 04, 05, 06, 07, 08, 09, 010, 011, 012, 013, 014, 015, 016, 017, 018, 019, 020, 021, 022, 023, 024, 025, 026, 027, 028, 029, 030, 031, 032, 033, 034, 035, 036, 037, 038, 039, 040, 041, 042, 043, 044, 045, 046, 047, 048, 049, 050, 051, 052, 053, 054, 055, 056, 057, 058, 059, 060, 061, 062, 063, 064, 065, 066, 067, 068, 069, 070, 071, 072, 073, 074, 075, 076, 077, 078, 079, 080, 081, 082, 083, 084, 085, 086, 087, 088, 089, 090, 091, 092, 093, 094, 095, 096, 097, 098, 099.
Alors le programme m'affiche bien OK.
Code : Sélectionner tout - Visualiser dans une fenêtre à part regex_0_255 = re.compile('^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$')
Quelques explications sur mon code :
- exhaustive_expected_matches contient les 256 chaînes de '0' à '255'.
- some_expected_mismatches contient toutes les chaînes de '256' à '999' et les 1000 chaînes de '00' à '0999' (toujours avec un seul 0 en trop à gauche).
- bad_mismatches contient les chaînes de exhaustive_expected_matches refusées par regex_0_255, alors qu'elles auraient dû être acceptées.
- bad_matches contient les chaînes de some_expected_mismatches acceptées par regex_0_255, alors qu'elles auraient dû être refusées.
- Si bad_mismatches est non vide, alors j'affiche son contenu dans un message. Si bad_matches est non vide, alors j'affiche son contenu dans un message. Si les deux sont vides, alors j'affiche OK.
Dans mon expression régulière, j'ai décomposé le problème en sous-problèmes de cette manière : j'ai traité le cas des chaînes à un caractère, puis le cas de celles à deux caractères, puis le cas de celles à trois caractères.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager