Les plages sont difficiles à gérer correctement avec les expressions régulières. Les ER sont un outil pour l'analyse textuelle ou l'appariement de modèles, et non pour l'analyse sémantique. Le mieux que vous pouvez probablement faire en toute sécurité est de reconnaître une chaîne qui est un nombre avec un certain nombre de chiffres. Vous pouvez construire des RE pour le nombre maximum ou minimum de chiffres pour une gamme en utilisant un logarithme de base 10. Par exemple, le match un nombre entre un et b où b>un, construire le RE par:
re = "[1-9][0-9]{"
re += str(log10(a)-1)
re += "-"
re += str(log10(b)-1)
re += "}"
Remarque: l'exemple est en aucun langage de programmation. Désolé, C# pas vraiment parlé ici. Il existe quelques problèmes de point de limite, mais l'idée de base est de construire un RE comme [1-9][0-9]{1}
pour quelque chose entre 100 et 999 et si la chaîne correspond à l'expression, convertir en un entier et faire l'analyse de plage dans l'espace de valeur à la place de l'espace lexical. Avec tout cela dit ... Je voudrais aller avec la solution de Mehrdad et utiliser quelque chose fourni par le langage comme decimal.TryParse
et ensuite vérifier le résultat.
Soyez conscient que vous courrez dans toutes sortes de cas bizarres avec différents séparateurs décimaux, séparateurs de milliers et d'autres choses spécifiques de la culture. Les nombres décimaux et les expressions régulières deviennent facilement désordonnés. –
Quel est le problème avec 'decimal.TryParse' qui vous donne envie de faire cela? –
@Mehrdad - Votre commentaire devrait être une réponse. –