Parse equation to list of tuples in Python

大兔子大兔子 提交于 2019-12-11 00:34:31

问题


I want to parse equations and get a list of tuples. For example, when I enter

2x = 4+3y, 

I want to get

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

This is my regex so far:

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

It works fine for the above query but it does not capture equations like

2 = x +3y, (where x does not have any coefficient)

How do I capture that?


回答1:


(\d*)(\w*) *(=) *(\d*)(\w*) *[+|\-|*|/] *(\d*)(\w*)

How about this regex?

It separates all operands and operators. (and inside operands it also splits number and variable).

For testing the regex I normally use https://regex101.com/ so you can build regex with live changes there.




回答2:


If you change the quantifier on the coefficient from + (one or more) to * (zero or more) then you should get the result you are after. You will also get an empty string match due to all the quantifiers now being * but you can filter out that match.

>>> 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', ''), ('', '', '', '')]

Note: whilst this solves your direct question this is not a good approach to parsing infix equations.



来源:https://stackoverflow.com/questions/54840645/parse-equation-to-list-of-tuples-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!