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

时间:2014-06-04 16:14:09

标签: python regex string split

我有很多python字符串,例如"A7*4""Z3+8""B6 / 11",我希望将这些字符串拆分,以便它们位于列表中,格式为{ {1}},["A7", "*", "4"]等。我使用了很多不同的拆分方法,但我认为我需要在有数学符号的地方执行拆分,例如["B6", "/", "11"]。我还需要删除空格。

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

2 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:3)

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

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