Как отделить знак и числа из математического выражения в Python?

Необходимо из математического выражения (например 12+32) выделить сначала два числа (12, 32), а затем и знак (+).

Числа только целые и положительные, знаком могут служить "+", "-", "*", "/".

Думал можно в лоб решить задачу, то есть просто пытаться использовать split() для каждого знака, но хочется более аккуратного решения с помощью регулярных выражений. Попытался сам составить регулярку, но безуспешно (получилось что-то вроде \d+[-+/*]\d+).

Буду благодарен, если поможете понять как здесь использовать регулярные выражения и если посоветуете хорошие материалы для дальнейшего изучения данной темы.


Ответы (2 шт):

Автор решения: MarianD

Ваш подход правильный, только добавить 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
→ Ссылка
Автор решения: ganz

Предлагаю исспользовать модуль SymPy, что в будущем даст более широкие возможности

import sympy
exp=sympy.sympify('-1+2 - 3*4 /2',evaluate=False)
exp.atoms()
#{2, 3, 4, -1}
→ Ссылка