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