Pour résoudre le problème du SS.S or S.SS, il doit être possible d'utiliser l'assertion %f[set] qui impose que la position soit suivie par un élément du set et qu'elle ne soit pas précédée par un élément du même set. Ça donnerait ça:
%f[0-9]([0-9][0-9][.][0-9]%f[ ])?([0-9][.][0-9][0-9])?
Les deux formes sont mises dans des groupes optionnels. La première assertion (qui est précédée d'un espace) %f[0-9] impose qu'au moins un des deux groupes réussisse. La seconde assertion %f[ ] impose elle, en cas de réussite du premier groupe que celui-ci soit suivi d'un espace, ce qui exclut que le deuxième groupe réussisse en même temps.
Désolé si la syntaxe est un peu brute mais j'ignore si on peut l'écrire de cette manière:
%f[%d](%d{2}\.%d%f[ ])?(%d\.%d{2})?
(Je n'ai rien pour tester, je ne sais pas si la classe %d doit s'entendre en ASCII ou en unicode, et si l'antislash est bien le caractère d'échappement pour les caractères spéciaux).
Partager