我有一个表达式,我想在 python 2.6 中提取它。这是示例:
[a]+[c]*0.6/[b]-([a]-[f]*0.9)
这将:
(
'[a]',
'+',
'[c]',
'*',
'0.6',
'/',
'[b]',
'-',
'(',
'[a]',
'-',
'[f]',
'*',
'0.9',
')',
)
我需要一份清单。请帮我一把。谢谢。
我有一个表达式,我想在 python 2.6 中提取它。这是示例:
[a]+[c]*0.6/[b]-([a]-[f]*0.9)
这将:
(
'[a]',
'+',
'[c]',
'*',
'0.6',
'/',
'[b]',
'-',
'(',
'[a]',
'-',
'[f]',
'*',
'0.9',
')',
)
我需要一份清单。请帮我一把。谢谢。
>>> 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', ')']
一种方法是创建一个正则表达式列表来匹配每个标记,例如:
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',
')']