python - 使用正则表达式在 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")
解决方案
尝试使用re.split()
它将根据运算符拆分您的方程式。例如:
text = 'a=x[3]+50'
pattern = r'([\=\+\-\%\*])'
result = re.split(pattern, text)
输出:
['a', '=', 'x[3]', '+', '50']
推荐阅读
- botframework - 使用 Bot Framework Composer 从 bot 上传 pdf 文件
- sbt - 从命令行设置 run / baseDirectory
- special-characters - 在美元引用的字符串查询中转义美元符号
- python - 使用多类变量计算 roc 曲线
- delphi - TQueue.Capacity 属性的用途或功能是什么?
- amazon-web-services - 调度 aws lambda 函数以发送电子邮件
- java - Spring Boot 执行器未从指定的端口启动
- ios - String contentsOf 加载的内容与浏览器显示的内容不同
- java - 我正在尝试制作一个掷骰子应用程序。它可以掷出特定数量的骰子。有没有办法添加这些值?
- arrays - 如果文本字段具有特定文本,则运行代码