2011-07-27 73 views
0

我有一個表達式,我想在Python 2.6中提取它。這裏是例子:提取表達式

[a]+[c]*0.6/[b]-([a]-[f]*0.9) 

這個打算:

(
    '[a]', 
    '+', 
    '[c]', 
    '*', 
    '0.6', 
    '/', 
    '[b]', 
    '-', 
    '(', 
    '[a]', 
    '-', 
    '[f]', 
    '*', 
    '0.9', 
    ')', 
) 

我需要它的列表。請給我一個手。謝謝。

+0

你想製作一個計算器或什麼? –

+0

不計算。我需要像例子一樣提取它。 – Zeck

+0

...一旦你提取它,你會做什麼? –

回答

1
>>> import re 
>>> expr = '[a]+[c]*0.6/[b]-([a]-[f]*0.9)' 
>>> re.findall('(?:\[.*?\])|(?:\d+\.*\d*)|.', expr) 
['[a]', '+', '[c]', '*', '0.6', '/', '[b]', '-', '(', '[a]', '-', '[f]', '*', '0.9', ')'] 
+0

哈哈。很簡單。 – Zeck

1

一種方法是創建正則表達式的列表,每個令牌匹配,是這樣的:

import re 
tokens = [r'\[.?\]', r'\(', r'\)', r'\+', r'\*', r'\-', r'/', r'\d+?.\d+', r'\d+'] 
regex = re.compile('|'.join(tokens)) 

那麼你可以使用findall你的表達式返回匹配列表:

>>> regex.findall('[a]+[c]*0.6/[b]-([a]-[f]*0.9)') 
<<< 
['[a]', 
'+', 
'[c]', 
'*', 
'0.6', 
'/', 
'[b]', 
'-', 
'(', 
'[a]', 
'-', 
'[f]', 
'*', 
'0.9', 
')']