通过数学表达式拆分Python字符串

mau*_*lus 5 python regex string split

我有很多Python字符串如"A7*4","Z3+8","B6 / 11",和我想要拆分这些字符串,这样他们将在一个列表,格式["A7", "*", "4"],["B6", "/", "11"]等我已经使用了很多不同的方法分割,但我想我需要只需执行有数学符号的分割,例如/,*,+,-.我还需要删除空白.

目前我正在使用re.split(r'(\D)', "B6 / 11")返回的代码['', 'B', '6', ' ', '', '/', '', ' ', '11'].相反,我想回来["B6", "/", "11"].

iCo*_*dez 13

从字符串中删除空格后,您应该拆分字符集 [+-/*]:

>>> 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']
>>>
Run Code Online (Sandbox Code Playgroud)

  • 6*-7呢? (2认同)

Mat*_*ias 7

有一种方法可以使用 Python标记器在没有正则表达式的情况下解决此问题。我使用了一个更复杂的公式来展示此解决方案的功能。

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]])
Run Code Online (Sandbox Code Playgroud)

结果:

['(', 'A7', '*', '4', ')', '-', '(', 'Z3', '+', '8', ')', '-', '(', 'B6', '/', '11', ')']
Run Code Online (Sandbox Code Playgroud)