2011-07-27 10 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

一つのアプローチは、のようなもの各トークンにマッチする正規表現のリストを作成するには、次のようになります。そして、あなたがマッチのリストを返すために、あなたの式にfindallを使用することができ

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

を:

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