Регулярное выражение для анализа уравнения - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь разобрать уравнение, такое как

5x> = 7-5y + 4z

в список кортежей с python:

[('', '5', 'x', '>='), ('', '7', '', ''), ('-', '5', 'y', ''), ('+', '4', 'z', '')]

Мне удалось написать шаблон (pattern = "[+-]?\d*[a-z]?[><=]*"), чтобы разбить уравнение на группы, но я понятия не имею, как заставить его возвращать кортежи.Любая помощь приветствуется ...

1 Ответ

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

Я думаю, вы хотите это:

import re

pattern = re.compile(r'([+-]?)([0-9]+)([a-z]?)([><]?=?)')
re.findall(pattern, '5x>=7-5y+4z')

>>> [('', '5', 'x', '>='), ('', '7', '', ''), ('-', '5', 'y', ''), ('+', '4', 'z', '')]

Каждый экземпляр регулярного выражения, переданного в re.findall, помещается в кортеж, который затем дополнительно разбивается на строки, соответствующие каждой из групп в регулярном выражении..

Я взял на себя смелость с интерпретацией фактического регулярного выражения, так как я не уверен, каким будет ожидаемый результат для других случаев (например, будет ли термин 0x?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...