Comment utiliser les expressions régulières Python pour la conversion d'expressions arithmétiques

WBOY
Libérer: 2023-06-22 23:04:31
original
1655 Les gens l'ont consulté

L'expression régulière est un outil puissant en Python, qui peut être utilisé pour faire correspondre, rechercher, remplacer du texte et d'autres opérations. En informatique, les expressions régulières sont utilisées pour analyser facilement des expressions arithmétiques dans un format lisible par ordinateur. Cet article explique comment utiliser les expressions régulières Python pour la conversion d'expressions arithmétiques.

Tout d'abord, nous devons comprendre les règles grammaticales des expressions arithmétiques. Les expressions arithmétiques sont constituées d'opérandes et d'opérateurs, par exemple : 2 + 4 * 5. Dans cette expression, les nombres 2, 4 et 5 sont des opérandes et les signes plus et multiplication sont des opérateurs. L'ordre dans lequel les expressions arithmétiques sont analysées est déterminé par la priorité des opérateurs. D’une manière générale, la multiplication et la division ont une priorité plus élevée que l’addition et la soustraction.

Voyons maintenant comment utiliser des expressions régulières pour analyser des expressions arithmétiques. Tout d’abord, nous devons définir une expression régulière pour correspondre aux expressions arithmétiques. Une expression régulière simple pourrait être :

pattern = r"(d+)([+-*/])(d+)"
Copier après la connexion

Cette expression régulière correspond à une combinaison de deux nombres et d'un opérateur. Parmi eux, "(d+)" signifie correspondre à n'importe quel nombre de nombres, et "([+-*/])" signifie correspondre aux opérateurs d'addition, de soustraction, de multiplication et de division.

Maintenant, écrivons une fonction Python qui utilise des expressions régulières pour analyser des expressions arithmétiques :

import re def evaluate(expression): pattern = r"(d+)([+-*/])(d+)" match = re.match(pattern, expression) if match: operand1 = int(match.group(1)) operator = match.group(2) operand2 = int(match.group(3)) if operator == "+": return operand1 + operand2 elif operator == "-": return operand1 - operand2 elif operator == "*": return operand1 * operand2 elif operator == "/": return operand1 / operand2 else: return None
Copier après la connexion

Cette fonction accepte une expression arithmétique comme paramètre et renvoie le résultat du calcul . Il utilise d'abord des expressions régulières pour faire correspondre les nombres et les opérateurs de l'expression et les enregistre dans les variables opérande1, opérateur et opérande2. Ensuite, le calcul est effectué en fonction du type de l'opérateur et le résultat est renvoyé.

Maintenant, testons le fonctionnement de la fonction d'évaluation :

print(evaluate("2 + 4 * 5")) # 22 print(evaluate("10 - 3 / 2")) # 8.5
Copier après la connexion

Les résultats sont tous corrects. La fonction d'évaluation peut analyser avec succès les expressions arithmétiques et calculer les résultats.

Enfin, présentons comment gérer la préséance des opérateurs. Nous pouvons le faire en utilisant des expressions régulières et des fonctions récursives. Tout d'abord, nous définissons plusieurs expressions régulières pour faire correspondre des opérateurs avec des priorités différentes :

pattern_high = r"(d+)([*/])(d+)" pattern_low = r"(d+)([+-])(d+)"
Copier après la connexion

Parmi elles, pattern_high correspond aux opérations de multiplication et de division, et pattern_low correspond aux opérations d'addition et de soustraction. Ensuite, nous écrivons une fonction récursive qui gère tous les opérateurs de l'expression :

def evaluate(expression): match_high = re.search(pattern_high, expression) match_low = re.search(pattern_low, expression) if match_high: operand1 = int(match_high.group(1)) operator = match_high.group(2) operand2 = int(match_high.group(3)) if operator == "*": result = operand1 * operand2 elif operator == "/": result = operand1 / operand2 new_expression = re.sub(pattern_high, str(result), expression, count=1) return evaluate(new_expression) elif match_low: operand1 = int(match_low.group(1)) operator = match_low.group(2) operand2 = int(match_low.group(3)) if operator == "+": result = operand1 + operand2 elif operator == "-": result = operand1 - operand2 new_expression = re.sub(pattern_low, str(result), expression, count=1) return evaluate(new_expression) else: return int(expression)
Copier après la connexion

Cette fonction utilise deux expressions régulières pour faire correspondre les opérations de multiplication et de division ainsi que les opérations d'addition et de soustraction. S'il y a des opérations de multiplication et de division dans l'expression, les opérations de multiplication et de division sont calculées en premier et la fonction re.sub() est utilisée pour remplacer l'expression d'origine par le résultat. S'il n'y a que des opérations d'addition et de soustraction dans l'expression, les opérations d'addition et de soustraction sont calculées directement.

Maintenant, testons le fonctionnement de la fonction d'évaluation optimisée :

print(evaluate("2 + 4 * 5")) # 22 print(evaluate("10 - 3 / 2")) # 8.5 print(evaluate("2 + 4 * 5 / 2 - 3")) # 13
Copier après la connexion

Les résultats sont tous corrects, indiquant que notre optimisation a pris effet.

Pour résumer, vous pouvez facilement analyser des expressions arithmétiques et calculer les résultats à l'aide d'expressions régulières Python. Pour les expressions complexes, nous pouvons utiliser des fonctions récursives et des expressions régulières pour gérer la priorité des opérateurs et automatiser l'algorithme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!