首页 > 解决方案 > 使用正则表达式在 Python 中解析方程

问题描述

我有以下表达式需要能够解析为单独的标记:

"a=b+c"     ->  a b + c
"a=5+c"     ->  a 5 + c
"a=c*50"    ->  a c * 50
"a=50%50"   ->  a 50 % 50
"a=c-x[20]" ->  a c - x[20]
"a=x[3]+50" ->  a x[3] + 50
"a=b--c"    ->  a b - -c

我使用了这个正则表达式帮助,但我只能将正则表达式应用于一个示例,而不是所有示例。例如,以下代码仅适用于“a=b+c”、“a=c-50”,但如果我将它们交换为“a=c-50、“a=b+c”则无效:

#!/usr/bin/python
# URL that generated this code:
# http://txt2re.com/index-python.php3?s=%22a=b%2bc%22,%20%22a=c-50%22&-32&-34&25&-35&-33&36&27&5

import re

txt='"a=b+c", "a=c-50"'

re1='.*?'   # Non-greedy match on filler
re2='(a)'   # Any Single Character 1
re3='.*?'   # Non-greedy match on filler
re4='(b)'   # Any Single Character 2
re5='(.)'   # Any Single Character 3
re6='(c)'   # Any Single Character 4
re7='.*?'   # Non-greedy match on filler
re8='(a)'   # Any Single Character 5
re9='.*?'   # Non-greedy match on filler
re10='.'    # Uninteresting: c
re11='.*?'  # Non-greedy match on filler
re12='(.)'  # Any Single Character 6
re13='(.)'  # Any Single Character 7
re14='(\\d+)'   # Integer Number 1

rg = re.compile(re1+re2+re3+re4+re5+re6+re7+re8+re9+re10+re11+re12+re13+re14,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
   c1=m.group(1)
   c2=m.group(2)
   c3=m.group(3)
   c4=m.group(4)
   c5=m.group(5)
   c6=m.group(6)
   c7=m.group(7)
   int1=m.group(8)
   print("("+c1+")"+"("+c2+")"+"("+c3+")"+"("+c4+")"+"("+c5+")"+"("+c6+")"+"("+c7+")"+"("+int1+")"+"\n")

标签: pythonregex

解决方案


尝试使用re.split() 它将根据运算符拆分您的方程式。例如:

text = 'a=x[3]+50'
pattern = r'([\=\+\-\%\*])'
result = re.split(pattern, text)

输出:

['a', '=', 'x[3]', '+', '50']

推荐阅读