Извлечение выражения - PullRequest
       26

Извлечение выражения

0 голосов
/ 27 июля 2011

У меня есть выражение, и я хочу извлечь его в Python 2.6. Вот пример:

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

это будет:

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

Мне нужен список. Пожалуйста, дайте мне руку. Спасибо.

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Один из подходов состоит в том, чтобы создать список регулярных выражений для соответствия каждому токену, что-то вроде:

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',
 ')']
1 голос
/ 27 июля 2011
>>> 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', ')']
...