Как отделить знак и числа из математического выражения в Python?
Необходимо из математического выражения (например 12+32) выделить сначала два числа (12, 32), а затем и знак (+).
Числа только целые и положительные, знаком могут служить "+", "-", "*", "/".
Думал можно в лоб решить задачу, то есть просто пытаться использовать split() для каждого знака, но хочется более аккуратного решения с помощью регулярных выражений.
Попытался сам составить регулярку, но безуспешно (получилось что-то вроде \d+[-+/*]\d+).
Буду благодарен, если поможете понять как здесь использовать регулярные выражения и если посоветуете хорошие материалы для дальнейшего изучения данной темы.
Ответы (2 шт):
Ваш подход правильный, только добавить 3 пары скобок в регулярное выражение и применить его:
import re
pattern = r"(\d+)([-+/*])(\d+)"
s = "12+3"
parts = re.findall(pattern, s)
num1, op, num2 = parts[0] # num1 == "12", op == "+", num2 == "3"
Но — может быть — вас интересует только результат, а не числа и операнд. Тогда примените стандартную функцию eval():
result = eval(s) # result == 15
Предлагаю исспользовать модуль SymPy, что в будущем даст более широкие возможности
import sympy
exp=sympy.sympify('-1+2 - 3*4 /2',evaluate=False)
exp.atoms()
#{2, 3, 4, -1}