Разобрать уравнение для списка кортежей в Python - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу разобрать уравнения и получить список кортежей.Например, когда я ввожу

2x = 4+3y, 

, я хочу получить

[('', '2', 'x', '='), ('','4','',''), ('+','3','y','')]

Пока это мое регулярное выражение:

([+-]*)([0-9]+)([a-z]*)([<=>]*)

Это прекрасно работает для вышеупомянутогозапрос, но он не захватывает уравнения, такие как

2 = x +3y, (где х не имеет никакого коэффициента)

Как мне захватить это?

Ответы [ 2 ]

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

Если вы измените квантификатор по коэффициенту с + (один или несколько) на * (ноль или более) , то вы должны получить результат, который вы после,Вы также получите пустое совпадение строки, поскольку все квантификаторы теперь равны *, но вы можете отфильтровать это совпадение.

>>> import re
>>> e1 = "2x=4+3y"
>>> e2 = "2=x+3y"
>>> re.findall("([+-]*)([0-9]*)([a-z]*)([<=>]*)", e1)
[('', '2', 'x', '='), ('', '4', '', ''), ('+', '3', 'y', ''), ('', '', '', '')]
>>> re.findall("([+-]*)([0-9]*)([a-z]*)([<=>]*)", e2)
[('', '2', '', '='), ('', '', 'x', ''), ('+', '3', 'y', ''), ('', '', '', '')]

Примечание: хотя это решает ваш прямой вопрос, это не очень хороший подход к анализу инфиксных уравнений.

0 голосов
/ 23 февраля 2019
(\d*)(\w*) *(=) *(\d*)(\w*) *[+|\-|*|/] *(\d*)(\w*)

Как насчет этого регулярного выражения?

Он разделяет все операнды и операторы.(и внутри операндов он также разделяет число и переменную).

Для тестирования регулярного выражения я обычно использую https://regex101.com/, чтобы вы могли построить регулярное выражение с живыми изменениями.

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