2010-11-04 6 views
18

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?

+0

Ajout de la balise C# car votre question précédente portait sur C#. J'espère que ça va. – Shoban

+4

Je ne pense pas que cette question soit spécifique à C#. –

+0

la question initiale était C# -implementation specific; cette question n'est pas spécifique à la mise en œuvre. –

Répondre

42

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.

+3

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

+1

@Xaisoft: oui, vous l'avez interprété correctement. –

0

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.

+0

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

2

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.

+0

Merci pour le lien. – Xaisoft

3

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.

+0

Ceci est techniquement correct mais incomplet - regex est plus efficace sur les chaînes * qui contiennent des données régulières *. –

0

cas d'utilisation de base pour RegEx: -

  1. 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.

  2. Vous devez automatiser l'extraction de ces valeurs en bouclant plusieurs documents.

  3. 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.

Questions connexes