Dividir una cadena de Python por expresiones matemáticas

Tengo muchas cadenas de python como "A7*4" , "Z3+8" , "B6 / 11" , y quiero dividir estas cadenas para que estén en una lista, en el formato ["A7", "*", "4"] , ["B6", "/", "11"] , etc. He usado muchos métodos de división diferentes, pero creo que solo necesito realizar la división donde hay una matemática símbolo, como /,*,+,- . También tendría que quitar el espacio en blanco.

Actualmente estoy usando el código re.split(r'(\D)', "B6 / 11") , que está devolviendo ['', 'B', '6', ' ', '', '/', '', ' ', '11'] . En su lugar quiero volver ["B6", "/", "11"] .

Debe dividir el conjunto de caracteres [+-/*] después de eliminar el espacio en blanco de la cadena:

 >>> import re >>> def mysplit(mystr): ... return re.split("([+-/*])", mystr.replace(" ", "")) ... >>> mysplit("A7*4") ['A7', '*', '4'] >>> mysplit("Z3+8") ['Z3', '+', '8'] >>> mysplit("B6 / 11") ['B6', '/', '11'] >>> 

Hay una manera de resolver esto sin expresiones regulares utilizando el tokenizador de Python. Utilicé una fórmula más compleja para mostrar las capacidades de esta solución.

 from io import StringIO import tokenize formula = "(A7*4) - (Z3+8) - ( B6 / 11)" print([token[1] for token in tokenize.generate_tokens(StringIO(formula).readline) if token[1]]) 

Resultado:

 ['(', 'A7', '*', '4', ')', '-', '(', 'Z3', '+', '8', ')', '-', '(', 'B6', '/', '11', ')']