Quelle est la plus courte regex qui peut correspondre à des numéros de points flottants non nuls avec un nombre de décimaux?
Il devrait accepter des nombres tels que p> mais rejeter des constructions de valeur AS P> .
.02
-.
-.996
0
-0
0.
-0.
-0.000
0.00
--
..
+
+0
+1
+.
+1.26
,etc
4 Réponses :
Ceci est celui que j'utilise toujours:
utilisé dans un exemple de PHP: P> (\ + | -)? ([0-9] + \.? [0-9] * | \. [0-9] +) ([EE] (\ + | -)? [0-9] +)? Code> P>
Array
(
[0] => 1.234e4
[1] =>
[2] => 1.234
[3] => e4
)
^-?(?=.*[1-9])\d+(\.\d+)?$
Malheureusement, je ne connais pas les spécificités de regex dans C #.
Pourtant, heureusement, votre syntaxe était correcte. Comme un addenda, j'irais pour ^ -? (0 \. \ D * [1-9] \ d * | [1-9] \ d * (\ \ \ d +)?) $ Code > Au lieu de cela, afin de conserver la cohérence de pouvoir entrer des zéros finaux après des chiffres de la gamme (-1, 1) aussi, non seulement après des chiffres commençant par un chiffre positif.
Presque: rejette 0,10. Ajouter un autre \ d * code> après le premier
[1-9] code>.
Ouais, je n'étais pas tout à fait sûr de savoir si par exemple. 0.10 code> doit être rejeté ou non. Je vois maintenant que j'étais moins que cohérent :)
@Luvieere je pense que ma compétence L33T Regex0rz est à peu épuisée par maintenant :) 26 caractères semble être mon meilleur coup.
-?(?!0)\d+(\.\d+)? Note: Remember to put ^ $ if it's not done by your regexp matcher.May I ask why the "shortest"? A pre-compiler RegExp or the same with non-matching groups could be faster. Also a test for zero could possibly be faster too.
Je veux le plus court que cela irait quelque part dans un fichier XAML et je veux le garder aussi bref que possible.
Une différence de 5-15 octets compte suffisamment pour ignorer les performances et la clarté?
Les caractères dans une regexp ne comptent pas beaucoup une fois qu'il est compilé. Un évaluateur REGEXP est une machine à états finie. Il existe de nombreuses méthodes d'amélioration d'un graphique FSM, et c'est ce que font certains compilateurs. En bref, il n'y a pas une relation directe entre la longueur de la chaîne Regexp et la vitesse de l'évaluation.
Je ne suis pas préoccupé par la rapidité, mais sur la compacité visuelle. Je ne voudrais pas que j'ai grand regex à xaml, il est difficile de suivre.
Quel est le signe ! Code>? J'ai testé cela et ça ne marche pas, il échoue avec 5,02 et beaucoup d'autres ...
(?! ...) CODE> est une affirmation négative sur la lunette. À ce moment-là, l'expression
... code> ne doit pas correspondre à l'affirmation de réussir. régulier-expressions.info/lookaround.html
Luvieere: Code-Golf ("Quel est le moyen le plus court de faire ... quelles que soient les autres considérations") est pas b> à propos de la fabrication de code facile à suivre. Le code doit être concis mais pas nécessairement le plus court possible. Cela semble certainement comme si vous ne modifiez pas cette regex souvent, alors pourquoi vous souciez-vous de 5 caractères ou de 25 caractères? Jetez un coup d'œil à une langue comme APL, qui a définitivement produit court i> (en termes de caractères). en.wikipedia.org/wiki/aplu_(Programming_language )#examples
Cela correspond à 5,02 pour moi (non testé en C # cependant), le manque de (?!) code> SUPPORT pourrait être votre problème? Le
. Code> aurait dû être échappé. (Ce type d'erreur est facile à faire lorsque vous vous inquiétez de la taille du code au lieu d'autres choses ...: p)
"Ce type d'erreur est facile à faire" ... Parlez-moi de ça! Et facile à corriger également, cliquez simplement sur Modifier et allez-y à droite.
Incidemment, le \. Code> est uniquement apparu sous forme
. Code> en raison de la mise en forme (fixe maintenant). Cela n'acceptera pas "-1. 5", ou avez-vous voulu dire autre chose?
Ah, je sens une "mon regex est plus courte que toi" le concours ". Les choses des geeks se battent sur ... :)
0.0 code> sera de quel côté? accepter ou rejeter?
Vous avez oublié d'inclure
0.000 code> dans vos cas de test, la plupart des premières réponses l'acceptent, mais c'est toujours zéro dans mon livre. :)
Que diriez-vous de 001.000? accepter le droit?
Je suis prêt à passer
001.000 code> comme accepté, à condition que la solution soit suffisamment courte.
Permettre aux zéros de premier plan entraînera une confusion, car ils sont presque universellement interdits. Par la même jeton, les zéros traînants sont presque toujours acceptés (et peuvent être significatifs).