использовать метод findall () для разбора простых математических уравнений - PullRequest
0 голосов
/ 23 февраля 2019

как использовать метод findall () для разбора математического уравнения?

например, если у меня есть уравнение 8x> = 4 + 2y + 10z

вот мое кодирование

import re
equations = '8x >= 4 + 2y + 10z'
regexparse = r'\w+|[+/*-]'
result = re.findall(regexparse, equations)
print(result)

вывод

['8x', '4', '+', '2y', '+', '10z']

вместо этого, я ожидаю этот результат:

[('','8','x','>='),('','4','',''),('+','2','y',''),('+','10','z','')]

1 Ответ

0 голосов
/ 23 февраля 2019

Вместо этого вы должны использовать 4 группы захвата, если хотите, чтобы re.findall возвратил список из 4-х кортежей:

result = re.findall(r'(?=\S)([-+*/])?\s*(\d+)?\s*([a-z]+)?\s*([<>]?=)?', equations)

Если ваш пример ввода equations = '8x >= 4 + 2y + 10z', result станет:

[('', '8', 'x', '>='), ('', '4', '', ''), ('+', '2', 'y', ''), ('+', '10', 'z', '')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...