Je viens de demander à question d'utiliser une expression régulière pour autoriser les nombres entre -90.0 et +90.0. J'ai obtenu quelques réponses sur la façon d'implémenter l'expression régulière, mais la plupart des réponses ont également mentionné que cela serait mieux géré sans utiliser une expression régulière ou en utilisant une expression régulière serait exagéré. Alors, comment décidez-vous quand utiliser une expression régulière et quand ne pas utiliser une expression régulière. Y a-t-il une liste de vérification que vous pouvez suivre?Pour utiliser ou ne pas utiliser les expressions régulières?
Répondre
Les expressions régulières sont un traitement de texte outil pour tests de caractères. Plus formellement, les expressions régulières sont bonnes pour gérer des langages réguliers et mauvaises à presque tout le reste.
Dans la pratique, cela signifie que les expressions régulières ne sont pas bien adaptés à des tâches qui nécessitent sens découvrir (sémantique) dans le texte qui va au-delà du niveau du personnage. Cela nécessiterait un analyseur complet.
Dans votre cas particulier: reconnaître un nombre dans un texte est un exercice dont les expressions régulières sont bon at (les nombres décimaux peuvent être trivialement décrits en utilisant une langue normale). Cela fonctionne au niveau du personnage. Mais faire des choses plus avancées avec le nombre qui nécessite la connaissance de sa valeur numérique (c'est-à-dire sa sémantique) nécessite une interprétation. Les expressions régulières sont mauvaises à ce sujet. Trouver un numéro dans le texte est donc facile. Trouver un nombre dans le texte qui est supérieur à 11 mais inférieur à 1004 (ou qui est divisible par 3) est difficile: il faut reconnaître le ce qui signifie du nombre.
Ah, merci pour cela, donc reconnaître -90 et +90 est facile, mais déterminer si un nombre se situe entre -90,0 et +90,0 est plus difficile. Si je ne recherche que -90 ou 90, il s'agit simplement d'un simple texte '-90' ou '90' que je peux facilement analyser, mais si je cherche des nombres entre eux, cela devient plus qu'un simple traitement de texte . Est-ce que je comprends tout cela correctement? C'est ainsi que j'ai interprété ce que vous avez dit. – Xaisoft
@Xaisoft: oui, vous l'avez interprété correctement. –
La réponse est simple:
Si vous ne pouvez résoudre votre problème sans expressions régulières (juste par des fonctions de chaîne), ne pas utiliser des expressions régulières. Comme il a été dit dans un livre que j'ai lu: les expressions régulières sont la violence sur ordinateur.
Si l'utilisation des fonctions de chaîne de langue est compliquée, utilisez des expressions régulières.
Bien que des conseils pratiques, je ne pense pas que cette réponse est nécessairement * complète * des conseils. Cette question particulière n'a rien à voir avec la gestion des chaînes au-delà du fait que l'utilisateur regarde des représentations de chaînes de données décimales. – GrayWizardx
Sans un sens à être circulaire ou obtus, vous devez utiliser des expressions régulières lorsque vous avez une chaîne qui contient des informations structurées dans un regular language, et que vous voulez transformer cette chaîne dans un modèle d'objet.
Merci pour le lien. – Xaisoft
Je dirais que les expressions regex sont plus efficaces sur les chaînes. Pour les autres types de données, les manipulations de ce type de données seront généralement plus intuitives et fourniront de meilleurs résultats. Par exemple, si vous savez que vous avez affaire à DateTime, alors vous pouvez utiliser les méthodes Parse et TryParse pour les différents formats et il sera généralement plus fiable que vos propres expressions regex.
Dans votre exemple, vous avez affaire à des numéros, alors faites-en le cas. Regex est très puissant, mais ce n'est pas le code le plus facile à lire et à déboguer. Quand une autre solution fiable est à portée de main, vous devriez probablement y aller.
Ceci est techniquement correct mais incomplet - regex est plus efficace sur les chaînes * qui contiennent des données régulières *. –
cas d'utilisation de base pour RegEx: -
Vous avez besoin « paires de valeurs clés » - Les deux clés et valeurs sont intégrées dans un autre texte bruyant - cant accessible ou isolé autrement.
Vous devez automatiser l'extraction de ces valeurs en bouclant plusieurs documents.
Le nombre et la combinaison de paires de valeurs clés peuvent être découverts au fur et à mesure que vous progressez dans l'analyse du texte.
- 1. Utiliser les expressions régulières avec Glib
- 2. Pour utiliser ou ne pas utiliser session_set_save_handler?
- 3. Comment utiliser les expressions régulières dans les scripts bash?
- 4. Comment utiliser les expressions régulières avec Hibernate/Oracle
- 5. dates en PHP Manipuler sans utiliser les expressions régulières
- 6. Python: utiliser des expressions régulières pour supprimer quelque chose
- 7. expressions régulières: OU (|) dans subpattern ne fonctionne pas
- 8. var Utiliser ou ne pas utiliser var
- 9. Comment utiliser des expressions régulières dans la commande sed
- 10. Pour utiliser ViewData ou ne pas utiliser ViewData
- 11. vérifier l'entrée pour UTF-8, compter les caractères, utiliser les expressions régulières
- 12. Utiliser des expressions régulières pour faire correspondre un? mais pas un \?
- 13. quand utiliser ou non Lambda Expressions
- 14. Expressions régulières pour les non-chaînes
- 15. Aide sur les expressions régulières
- 16. expressions régulières en Java
- 17. expressions régulières: correspondance x fois OU fois
- 18. Comment utiliser des expressions régulières pour extraire le terme entre les crochets en PHP?
- 19. expressions régulières
- 20. Expressions régulières
- 21. A propos de SVG (utiliser ou ne pas utiliser?)
- 22. Expressions régulières en java
- 23. Echapper \ dans les expressions régulières dans Ruby
- 24. Nettoyer les expressions régulières Python
- 25. expressions régulières
- 26. expressions régulières
- 27. OpenGL - utiliser ou ne pas utiliser? pourquoi - Application iPhone dev
- 28. Négation Alternance dans les expressions régulières
- 29. aide avec les expressions régulières
- 30. preuves sur les expressions régulières
Ajout de la balise C# car votre question précédente portait sur C#. J'espère que ça va. – Shoban
Je ne pense pas que cette question soit spécifique à C#. –
la question initiale était C# -implementation specific; cette question n'est pas spécifique à la mise en œuvre. –