OVH Cloud OVH Cloud

Expressions régulières !

7 réponses
Avatar
Thibal
Bonjour à tous,

Je me permet de créer ce petit thread, car je ne suis pas un expert
en expressions régulières, et je n'arrive pas à comprendre pourquoi
l'une de mes expressions n'est pas correcte.

Je sais que ce n'est pas exactement du Java, mais si quelqu'un à
l'habitude de s'en servir dans ses programmes Java, peut être pourra
t'il m'aider.

Mon expression régulière est la suivante :

[\\d ,]*[.,]?\\d*

que je traduis par "il existe (éventuellement) d'abord un groupe composé
de chiffres de virgules ou d'espaces, puis il y'a éventuellement une
virgule ou un point, puis il y'a éventuellement d'autres chiffres".

Ceci représentant le format d'un nombre décimal.

Or, cette chaîne ci ne "match" pas l'expression : 569 983,00

Il me semble pourtant que l'expression régulière correspond bien à la
chaîne. Quelqu'un est t'il en mesure de me dire quelle a été mon erreur ?

Merci d'avance


Thibaut

7 réponses

Avatar
Manu
Bonjour à tous,

Je me permet de créer ce petit thread, car je ne suis pas un expert en
expressions régulières, et je n'arrive pas à comprendre pourquoi l'une
de mes expressions n'est pas correcte.

Je sais que ce n'est pas exactement du Java, mais si quelqu'un à
l'habitude de s'en servir dans ses programmes Java, peut être pourra
t'il m'aider.

Mon expression régulière est la suivante :

[d ,]*[.,]?d*

que je traduis par "il existe (éventuellement) d'abord un groupe composé
de chiffres de virgules ou d'espaces, puis il y'a éventuellement une
virgule ou un point, puis il y'a éventuellement d'autres chiffres".

Ceci représentant le format d'un nombre décimal.

Or, cette chaîne ci ne "match" pas l'expression : 569 983,00

Il me semble pourtant que l'expression régulière correspond bien à la
chaîne. Quelqu'un est t'il en mesure de me dire quelle a été mon erreur ?

Merci d'avance


Thibaut
tu dois echapper "." sinon c'est une classes de recherche :

Pattern.compile("[0-9 ]{0,}[.,][0-9]{0,}");
cela doit etre ce que tu veux... (je n'ai pas mis : "d'abord un groupe
composé de chiffres de virgules ou d'espaces" mais "d'abord un groupe
composé de chiffres ou d'espaces")

manu

Avatar
Thibal
Manu wrote:


Bonjour à tous,

Je me permet de créer ce petit thread, car je ne suis pas un expert
en expressions régulières, et je n'arrive pas à comprendre pourquoi
l'une de mes expressions n'est pas correcte.

Je sais que ce n'est pas exactement du Java, mais si quelqu'un à
l'habitude de s'en servir dans ses programmes Java, peut être pourra
t'il m'aider.

Mon expression régulière est la suivante :

[d ,]*[.,]?d*

que je traduis par "il existe (éventuellement) d'abord un groupe
composé de chiffres de virgules ou d'espaces, puis il y'a
éventuellement une virgule ou un point, puis il y'a éventuellement
d'autres chiffres".

Ceci représentant le format d'un nombre décimal.

Or, cette chaîne ci ne "match" pas l'expression : 569 983,00

Il me semble pourtant que l'expression régulière correspond bien à la
chaîne. Quelqu'un est t'il en mesure de me dire quelle a été mon erreur ?

Merci d'avance


Thibaut


tu dois echapper "." sinon c'est une classes de recherche :


Non, je ne suis pas sûr qu'il soit nécessaire d'échapper le '.'
lorsqu'il se trouve dans des []. J'ai tout de même essayé bien sûr ;)

Pattern.compile("[0-9 ]{0,}[.,][0-9]{0,}");
cela doit etre ce que tu veux... (je n'ai pas mis : "d'abord un groupe
composé de chiffres de virgules ou d'espaces" mais "d'abord un groupe
composé de chiffres ou d'espaces")


Désolé, mais ton expression régulière marche encore moins bien que la
mienne :-/ :'(
D'autres idées ?

manu


Thibaut


Avatar
Manu
Manu wrote:


Bonjour à tous,

Je me permet de créer ce petit thread, car je ne suis pas un expert
en expressions régulières, et je n'arrive pas à comprendre pourquoi
l'une de mes expressions n'est pas correcte.

Je sais que ce n'est pas exactement du Java, mais si quelqu'un à
l'habitude de s'en servir dans ses programmes Java, peut être pourra
t'il m'aider.

Mon expression régulière est la suivante :

[d ,]*[.,]?d*

que je traduis par "il existe (éventuellement) d'abord un groupe
composé de chiffres de virgules ou d'espaces, puis il y'a
éventuellement une virgule ou un point, puis il y'a éventuellement
d'autres chiffres".

Ceci représentant le format d'un nombre décimal.

Or, cette chaîne ci ne "match" pas l'expression : 569 983,00

Il me semble pourtant que l'expression régulière correspond bien à la
chaîne. Quelqu'un est t'il en mesure de me dire quelle a été mon
erreur ?

Merci d'avance


Thibaut



tu dois echapper "." sinon c'est une classes de recherche :



Non, je ne suis pas sûr qu'il soit nécessaire d'échapper le '.'
lorsqu'il se trouve dans des []. J'ai tout de même essayé bien sûr ;)
hum si si


Pattern.compile("[0-9 ]{0,}[.,][0-9]{0,}");
cela doit etre ce que tu veux... (je n'ai pas mis : "d'abord un groupe
composé de chiffres de virgules ou d'espaces" mais "d'abord un groupe
composé de chiffres ou d'espaces")



Désolé, mais ton expression régulière marche encore moins bien que la
mienne :-/ :'(
hum hum hum ben chez moi tout marche a la perfection... ce viens de chez

toi... copie/colle cela :

Pattern p = Pattern.compile("([0-9 ]{0,})([.,])([0-9]{0,})");
Matcher m = p.matcher("569 983,00");
boolean b = m.matches();
System.out.println("RegExp : existe ? " + b );
System.out.println("filtre 1 : " + m.group(1));
System.out.println("filtre 2 : " + m.group(2));
System.out.println("filtre 3 : " + m.group(3));

ca marche c'est sur... ton probleme est donc ailleur ;)

D'autres idées ?




manu



Thibaut




Avatar
Thibal
Manu wrote:


Manu wrote:


Bonjour à tous,

Je me permet de créer ce petit thread, car je ne suis pas un
expert en expressions régulières, et je n'arrive pas à comprendre
pourquoi l'une de mes expressions n'est pas correcte.

Je sais que ce n'est pas exactement du Java, mais si quelqu'un à
l'habitude de s'en servir dans ses programmes Java, peut être pourra
t'il m'aider.

Mon expression régulière est la suivante :

[d ,]*[.,]?d*

que je traduis par "il existe (éventuellement) d'abord un groupe
composé de chiffres de virgules ou d'espaces, puis il y'a
éventuellement une virgule ou un point, puis il y'a éventuellement
d'autres chiffres".

Ceci représentant le format d'un nombre décimal.

Or, cette chaîne ci ne "match" pas l'expression : 569 983,00

Il me semble pourtant que l'expression régulière correspond bien à
la chaîne. Quelqu'un est t'il en mesure de me dire quelle a été mon
erreur ?

Merci d'avance


Thibaut




tu dois echapper "." sinon c'est une classes de recherche :




Non, je ne suis pas sûr qu'il soit nécessaire d'échapper le '.'
lorsqu'il se trouve dans des []. J'ai tout de même essayé bien sûr ;)


hum si si


Pattern.compile("[0-9 ]{0,}[.,][0-9]{0,}");
cela doit etre ce que tu veux... (je n'ai pas mis : "d'abord un
groupe composé de chiffres de virgules ou d'espaces" mais "d'abord un
groupe composé de chiffres ou d'espaces")




Désolé, mais ton expression régulière marche encore moins bien que la
mienne :-/ :'(


hum hum hum ben chez moi tout marche a la perfection... ce viens de chez
toi... copie/colle cela :

Pattern p = Pattern.compile("([0-9 ]{0,})([.,])([0-9]{0,})");
Matcher m = p.matcher("569 983,00");
boolean b = m.matches();
System.out.println("RegExp : existe ? " + b );
System.out.println("filtre 1 : " + m.group(1));
System.out.println("filtre 2 : " + m.group(2));
System.out.println("filtre 3 : " + m.group(3));

ca marche c'est sur... ton probleme est donc ailleur ;)


Pourtant moi avec un chaine qui contient "569 983,00", si je fais
maChaine.matches(([0-9 ]{0,})([.,])([0-9]{0,})) ben ca me renvoie false...

A comprend pas :'(

D'autres idées ?





manu




Thibaut






Avatar
Mike Baroukh
Bonjour.

Je ne suis pas un expert non plus, mais,

1- J'ai l'habitude (à tort ?) de mettre un | (pipe) lorsqu'il y a des
"ou".
ainsi,
[d ,] devrait être [d| |,]

2- Pour l'espace, je crois qu'il est plus correcte de mettre s. Donc,
re [d ,] devrait être [d|s|,]

Ensuite, si tu inclus la virgule dans le premier groupe, elle ne se
trouvera pas dans le second.

Personnellement, pour matcher 569 983,00, j'aurais mis
[ds]*[.|,]?d*

On arrive presque à la meme chose.

Mike


[d ,]*[.,]?d*

que je traduis par "il existe (éventuellement) d'abord un groupe
composé de chiffres de virgules ou d'espaces, puis il y'a
éventuellement une virgule ou un point, puis il y'a
éventuellement



d'autres chiffres".









Avatar
Olivier Miakinen

Mon expression régulière est la suivante :

[d ,]*[.,]?d*

que je traduis par "il existe (éventuellement) d'abord un groupe composé
de chiffres de virgules ou d'espaces, puis il y'a éventuellement une
virgule ou un point, puis il y'a éventuellement d'autres chiffres".


J'ai l'impression que tu veux prévoir en une seule expression le format
américain (569,983.00) et le format français (569 983,00). Je ne sais
pas si c'est une bonne chose en soi, mais puisque c'est le cas tu peux
tout aussi bien prendre une expression aussi simple que « [d ,.] » au
lieu de t'embêter à décomposer.

Ceci représentant le format d'un nombre décimal.


Disons que cela englobe plusieurs formats, sans éliminer toutes les
formes incorrectes, par exemple :

« 56 9,83 ,,0. »
« 3, 50 » dans « nous avions ramassé, à nous 3, 50 champignons »
« ,,,,,,,,,,,, »
etc.

Or, cette chaîne ci ne "match" pas l'expression : 569 983,00


Est-ce que l'espace ne serait pas insécable, par hasard ? Ce serait
assez logique dans un nombre, et dans ce cas il faudrait que tu la
rajoutes dans ton expression rationnelle.

Avatar
Thibal
Olivier Miakinen wrote:

Mon expression régulière est la suivante :

[d ,]*[.,]?d*

que je traduis par "il existe (éventuellement) d'abord un groupe composé
de chiffres de virgules ou d'espaces, puis il y'a éventuellement une
virgule ou un point, puis il y'a éventuellement d'autres chiffres".



J'ai l'impression que tu veux prévoir en une seule expression le format
américain (569,983.00) et le format français (569 983,00). Je ne sais
pas si c'est une bonne chose en soi, mais puisque c'est le cas tu peux
tout aussi bien prendre une expression aussi simple que « [d ,.] » au
lieu de t'embêter à décomposer.


Celà n'est pas possible, car mon expression régulière sert à vérifier la
validité du nombre pendant la saisie, ce qui veut dire qu'elle doit
interdire une saisie invalide, mais je crois qu'en effet je vais devoir
faire deux regexp différentes en fonction de la langue...

Ceci représentant le format d'un nombre décimal.



Disons que cela englobe plusieurs formats, sans éliminer toutes les
formes incorrectes, par exemple :

« 56 9,83 ,,0. »
« 3, 50 » dans « nous avions ramassé, à nous 3, 50 champignons »
« ,,,,,,,,,,,, »
etc.


Or, cette chaîne ci ne "match" pas l'expression : 569 983,00



Est-ce que l'espace ne serait pas insécable, par hasard ? Ce serait
assez logique dans un nombre, et dans ce cas il faudrait que tu la
rajoutes dans ton expression rationnelle.


Gnéééé ??? Qu'est ce que ca veut dire un espace insécable ?
Je me doutais bien qu'il devait un y avoir un problème avec l'espace,
car c'est depuis que je l'ai rajouté que rien ne marche plus. J'ai
pourtant essqyé de le remplacer par un s, j'ai même essayé p{Space}
mais rien ne passe. C'est comme si en effet mon espace n'en était pas
un. Peux tu s'il te plait m'éclairer un peu plus sur ce sujet ?

Merci d'avance,


Thibaut