Je crée un langage de programmation en Python et un composant principal qui me manque pour le langage de base est la capacité à analyser des équations mathématiques. J'ai la fonction d'analyser les maths mais je dois être capable de vérifier si l'entrée est une équation mathématique. Je cherche une regex pour correspondre à quelque chose comme 3 * x^(4 * y) + 1- (7 * y * z/x).Python Math Regex
Répondre
Je suis à la recherche d'une expression régulière pour correspondre à quelque chose comme
3*x^(4*y)+1-(7*y*z/x)
.
Vous ne pouvez pas avoir une expression régulière qui correspond à des chaînes telles que "3 * x^(4 * y) ...". Les langages de parenthèse bien équilibrée sont simplement et non regular.
(En fait, quand on parle des expressions régulières spécifiques Python, ce qui précède est un mensonge. Mais si, je prétends que les expressions régulières seraient le mauvais outil pour cette tâche.)
Je la fonction pour analyser les maths ...
Si vous avez un analyseur, je vous suggère d'essayer simplement de l'analyser et dire true
si elle réussit, et false
autrement.
ʀᴇɢᴜʟᴀʀ sᴍᴇɢᴍᴜʟᴀʀ. Utilisez donc une meilleure bibliothèque de correspondance de modèles. Astuce: Python peut aussi correspondre à '(. *) \ 1', ce qui n'est pas non plus normal. . – tchrist
Hm .. droite. Pourtant, je ne crois pas que les expressions régulières soient le bon outil pour cela ... et vous? – aioobe
Non, pas vraiment. – tchrist
Vous devez utiliser un analyseur d'expressions réel. Voici une question sur l'expression d'analyse syntaxique Python:
Et voici le lien de la meilleure réponse:
* J'ai la fonction d'analyser les mathématiques * - On dirait qu'il a déjà un analyseur ... – aioobe
Je ne suis pas sûr. Quelle fonction d'analyseur est là qui peut analyser l'expression mais ne vous dit pas si elle a réussi ou non? Je ne suis pas sûr de ce qu'il a réellement. – steveha
Je pense qu'il veut dire qu'il a une fonction qui peut évaluer une expression analysée. –
Vous ne pouvez pas faire ce que vous voulez avec des expressions régulières, Ce n'est pas une langue régulière. Python a des extensions que vous pourriez abuser pour faire ce que vous voulez, mais ce serait impossible à maintenir et ne vous apporterait rien de plus que l'utilisation d'un analyseur.
Ce que vous voulez est un analyseur, une grande bibliothèque facile à utiliser pour Python est appelée pyparsing.
Voici un answer with a pyparsing example associé.
+1, bonne réponse :-) – aioobe
pyparsing est absolument le bon outil pour le travail ici. L'analyse de grammaires simples et irrégulières est précisément la tâche à laquelle Pyparsing excelle. –
Pour l'analyse du texte mathématique, reverse polish notation est souvent utilisé. Si vous obtenez votre entrée dans cette syntaxe, vous pouvez utiliser une fonction python RPN pour le lire. Pour un analyseur RPN en python, soit this soit this semble prometteur.
Si vous êtes l'écriture de votre propre langage de programmation, vous pouvez simplement forcer l'utilisateur à utiliser cette notation, et vérifier si elle est pas RPN :)
J'aime RPN moi-même, mais son exemple montre clairement qu'il veut infix. Son exemple: 3 * x^(4 * y) + 1- (7 * y * z/x) – steveha
Je ne suis pas tout à fait sûr de la façon dont vous avez voulu que je prenne ce commentaire. – steveha
Twas une blague: http://www.youtube.com/watch?v=rjQtzV9IZ0Q – tylerthemiler
Il se trouve que je peux utiliser une fonction récursive qui reconnaît les lettres et les nombres et ensuite lors de l'analyse des expressions, disons par exemple "x + y", il vérifie si "x" et "y" sont des maths valides. Donc, chaque fois que vous validez une expression, si c'est une lettre ou un chiffre, c'est valide ou si c'est un opérateur avec des choses valides de chaque côté.
- 1. Math expression regex
- 2. Ruby Regex: Math sur Backreferences
- 3. ds python import module math
- 4. Obtenir logarithme sans math log python
- 5. Les subtilités du module Python Math
- 6. Ruby Regex vs Python Regex
- 7. math, coordonne
- 8. regex Python avec des lettres ØÆÅ
- 9. Python: Regex nécessaire
- 10. Regex en Python
- 11. Python CORRESPONDANCE REGEX Newline
- 12. éviter regex [python]
- 13. Problèmes Regex Python
- 14. Python - Regex, correspondance multiple
- 15. Python regex negative lookbehind
- 16. python multiline regex
- 17. Début (python) regex question
- 18. python multiline groupe regex
- 19. Python Regex Aide
- 20. python regex recherche
- 21. Python regex string correspondant?
- 22. Python regex - Recherche multiple
- 23. RegEx remplacer en Python
- 24. python regex question,? op
- 25. Python regex findall
- 26. python regex et remplacer
- 27. Python: aide sur Regex
- 28. python regex [: alpha:]
- 29. Python Regex Question
- 30. Subtitution Regex en Python
Bien qu'une expression régulière puisse * vérifier * une telle entrée, je suis sceptique à quel point vous pouvez compter sur elle pour * valider * l'équation. –
Non, une expression régulière ne peut même pas * vérifier * si elle est syntaxiquement correcte. – aioobe
@aioobe: Ce n'est pas parce que les modèles de Python ne sont pas à la hauteur de la tâche que personne ne l'est. [Beaucoup sont] (http://stackoverflow.com/questions/4840988/the-recognizing-power-of-modern-regexes/4843579#4843579). Tu sais ça. S'il vous plaît arrêtez de répéter. – tchrist