从字符串到列表解析数学表达式元素

时间:2014-04-22 23:09:04

标签: python parsing

如果我有

string = '((a * 5) // ((10 - y) + z))'

我只想删除a510yz,并将其放入

lst1 = []

我还想删除*-+并将其放入

lst2 = []

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

使用正则表达式(re模块):

>>> import re
>>> NAMES_AND_VALUES = re.compile(r'\w+')
>>> OPERATORS = re.compile(r'(?:\+|\*|\-|\/)+')

>>> string = '((a * 5) // ((10 - y) + z))'

>>> NAMES_AND_VALUES.findall(string)
['a', '5', '10', 'y', 'z']

>>> OPERATORS.findall(string)
['*', '//', '-', '+']

...当然,如果需要,您可以将这些返回值存储在lst1lst2中。或者,如果lst1lst2是预先存在的列表对象,您可以执行lst1 += ...lst2 += ...

答案 1 :(得分:0)

请尝试以下方法:

import re
str = '((a * 5) // ((10 - y) + z))'

>> filter(None, re.split (r'[()*+ /-]', str))
['a', '5', '10', 'y', 'z']

>> filter(None, re.split ('[()0-9a-z ]', str))
['*', '//', '-', '+']