Expressions régulières - longuer d'une chaîne

Caddy -  
hibou_4ce_rouge Messages postés 1 Statut Membre -
Bonjour,

J'ai un petit problème. je me demande s'il est possible d'écrire une expression régulière vérifiant la longueur d'une chaîne. J'aimerais vérifier qu'une chaîne ne contient que 4 chiffres.
[0-9]{4} ne convient pas tout à fait car elle vérifie seulement qu'une chaîne contient une suite de 4 chiffres mais ne limite pas sa longueur à 4.

Merci pour vos propositions.

13 réponses

Michael_Ange Messages postés 231 Statut Membre 19
 
Essaie de délimiter ta chaine en marquant le début et la fin.
Exemple : ^[0-9]{4}$
1
lami20j
 
Salut,

Oui, mais en ce cas il limite la longueur de la ligne et pas de la chaîne.
Ca ne marche pas si on a une ligne "1234 et encore 4567 et encore 6789"
En revanche si la ligne ne doit contenir que une chaîne de 4 chiffres (il n'a pas précisé ;-) alors c'est ok.
0
Michael_Ange Messages postés 231 Statut Membre 19 > lami20j
 
Salut lami,
Selon son post, je crois que sa chaine ne doit contenir que 4 chiffres.
0
lami20j > Michael_Ange Messages postés 231 Statut Membre
 
Re,

Oui mais pas la ligne.
Une ligne peux contenir plusieurs chaines de caractères, non?
^ - début de ligne et début de chaine (ok)
$ - fin de ligne avant le caractère de saute de ligne; $ peut correspondre quelque part dans la chaîne si est seulement la chaine contient d'autres caractères de saut de ligne et si l'implémentation de regex le permets.
0
Michael_Ange Messages postés 231 Statut Membre 19
 
Je pense qu'on s'égare. La question de Caddy avait l'air clair, mais peut être que je l'ai mal comprise.
La discussion commence à virer au débat et ça me met un peu mal à l'aise.

On va laisser Caddy revenir et dire réellement ce qu'il veut.

P.S : Je trouve ta solution super... Et un regex, ça s'applique généralement à une chaine, pas a une ligne...
1
yofa Messages postés 1245 Statut Membre 207
 
Bonjour,

Je ne sais pas si j'aurais la solution, mais dequel logiciel s'agit t'il?
0
Caddy
 
Heu...
Je comprends pas très bien la réponse.
J'aimerais juste avoir l'expression régulière (si c'est possible) qui vérifie la longueur d'une chaîne de caractères (de longueur 4 et qui contient 4 chiffres), quel que soir le langage.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j
 
Salut,

Par exemple
~$ echo 1234 5678 abc1234 abc123456 123456789| perl -ne 'while(/\b([0-9]{4})\b/g){ print $1, " "}print "\n"'
1234 5678 


$ echo 1234 5678 abc1234 abc123456 123456789| tr ' ' '\n'                
1234
5678
abc1234
abc123456
123456789
$ echo 1234 5678 abc1234 abc123456 123456789| tr ' ' '\n' |grep -Eo '\b[0-9]{4}\b'
1234
5678

Tu dois encrer la regex avec les caractères limite mot pour obtenir exactement 4 caractères (chiffres dans ton cas)
0
yofa Messages postés 1245 Statut Membre 207
 
En fait simplement l'expression de ce que vous demandé depend du logiciel que vous utilisé!

Excel, C++, java, Sql ...
0
Michael_Ange Messages postés 231 Statut Membre 19
 
je me demande s'il est possible d'écrire une expression régulière vérifiant la longueur d'une chaîne...

Pas une ligne, mais juste une chaine...

Dans le cas où il voudrait adapter ça à une ligne contenant plusieurs chaine, il n'aura qu'a faire un split sur la ligne par rapport au caractère qui servira de séparateur de chaine, et ensuite tester le REGEX avec chaque élément de son tableau.
0
lami20j
 
Re,

Pas une ligne, mais juste une chaine...
Oui et moi je te dis que $ c'est la fin de ligne pas de chaîne.
Mais tu penses comme tu veux, ça ne changera pas le $
0
lami20j
 
Re,

il n'aura qu'a faire un split sur la ligne par rapport au caractère qui servira de séparateur de chaine, et ensuite

Faire un split quand on peut appliquer directement la regex c'est un peu vague.
On ne connais pas le séparateur qui n'est pas forcement un espace, il peut avoir des tabulations et signes de punctuations.
En utilisant les caractère debut/fin mot que ça soir juste une chaine par ligne ou plusieurs alors ça marchera
Encre la regex entre ^ et $ n'acceptera qu'une chaîne (motif) par ligne.
0
lami20j
 
Re,

Ne dit pas que ça "n'importe quoi 1243 et encore 4567" n'est pas une chaîne ;-)

Et un regex, ça s'applique généralement à une chaine, pas a une ligne...

Une regex s'applique à une chaine, je n'ai pas dit le contraire.
Pour allez plus loin, regex permet de trouver une ou plusieurs correspondances dans une chaîne.

Une ligne c'est une chaîne de caractères qui se fini par un caractère de saut de ligne.
Disons que je me suis peut être mal exprimé, je te l'accord.
En fait ta regex s'applique à une ligne vu que tu cherches la fin de ligne avec $
Donc tu obliges la correspondance être une ligne.
Je suis plus clair maintenant? ;-)
0
Caddy
 
Coucou!
Voila, je voulais vérifier qu'une chaine non seulement :
ne contienne que des chiffres mais aussi, a une longueur égale à 4.

Alors, j'ai essayé la solution proposée par Michael-Ange
^[0-9]{4}$
qui semble parfaitement bien marcher.

Merci pour vos reponses.
0
lami20j
 
Re,

Bien sûr qu'elle fonctionne.
Mais le concepts de chaîne est ligne il faut les assimilé.
Quand on fait ^motif$ ça veut dire que non seulement la chaîne a la longueur 4 et qu'elle contient des chiffres mais qu'il y a une seule correspondance par ligne ce que tu n'as pas précisé c'est pour ça que j'ai pensé à une solution plus générique qui ne mets pas en doute la solution pertinente de Michael-Ange.

Il faut aussi prendre l'habitude de préciser aussi avec quelle application veut tu implémenter puisque les regex différent en fonction de l'implémentation (logiciel, langage).

J'aurai pu te proposer par exemple ^\d{4}$ mais ça n'est pas reconnu par tout.
Le jour ou tu cherches plusieurs correspondances dans une chaîne alors pense aux limites de mots. puisque ^motif$ ne te donneras pas le résultat voulu.
Sur ce coup Michael_Ange a été devin ;-)
0
Michael_Ange Messages postés 231 Statut Membre 19
 
Content que t'es trouvé ta réponse, mais comme l'a dit lami20j, la prochaine fois faudra être un peu plus précis (langage).
Je crois que c'est ce que Yofa essayait de te faire comprendre.
0
Caddy
 
D'accord.
Merci encore.
0
hibou_4ce_rouge Messages postés 1 Statut Membre
 
Bonjour,

Le sujet est très vieux mais j'ai trouvé une solution alors je la poste.

Je suppose que tu utilisais Notepad++ et que tu faisais t'es expressions avec rechercher/remplacer.

Je n'ai pas trouvé comment vérifier la longueur d'une chaîne mais tu peux ajouter à la vérification des caractères avant et après tes 4 chiffres.

C'est à dire, mettons que tu as des colonnes séparés par des tabulations avec des séries de chiffres de différentes longueurs et que tu veux seulement une série de 4 chiffres.
Tu vas inclure dans ta recherche une tabulation avant et une après tes 4 chiffres, comme ceci :

\t[0-9]{4}\t

Notepad cherchera ainsi des occurrence de ce genre "tab1234tab".

ça peut marcher avec des espaces ou autres caractères de séparation.

Voilà,
j'espère que ça en aidera certain.
0