在Python中将数学表达式字符串拆分为标记

7 投票
2 回答
6275 浏览
提问于 2025-04-18 08:36

我有很多这样的Python字符串,比如 "A7*4""Z3+8""B6 / 11",我想把这些字符串拆分成一个列表,格式像这样:["A7", "*", "4"]["B6", "/", "11"],等等。我试过很多不同的拆分方法,但我觉得我只需要在数学符号的地方进行拆分,比如 /、*、+、-。另外,我还需要去掉空格。

现在我使用的代码是 re.split(r'(\D)', "B6 / 11"),结果返回的是 ['', 'B', '6', ' ', '', '/', '', ' ', '11']。我想要的结果是 ["B6", "/", "11"]

2 个回答

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]])

结果:

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

你应该在去掉字符串中的空格后,按照字符集 [+-/*] 来进行分割:

>>> 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']
>>>

撰写回答