在Python中将数学表达式字符串拆分为标记
我有很多这样的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']
>>>