【问题标题】:How to get the equations from Mathpix API string response [closed]如何从 Mathpix API 字符串响应中获取方程 [关闭]
【发布时间】:2018-08-10 05:12:55
【问题描述】:

当我点击数学相机中的照片时 3 方程求解问题。

Mathpix API 给出这样的响应:

"\left.\beginarray l 2 x + 3 y + 3 z = 8 \ 3 x + y + 2 z = 10 \ 8 x + 9 x + 10 z = 12 \endarray \right."

我想使用模式匹配或任何最佳解决方案从这个字符串(API 响应)中获取三个方程。从 Edittext 计算它。

【问题讨论】:

  • 那么对于给定的样本输入,期望的输出是什么?
  • 1) 2x+3y+3z=8 2)3x+y+_2z=10 3)8x+9x+10z=12 类似这样的......所有三个方程都分开了。 @Yunnosch
  • 你为什么要删除似乎是除法运算符的东西?
  • 规则是什么? “'\beginarray' 之后和 '\endarray' 之前的所有内容,拆分 '/' 所在的位置并向上计数。” ?
  • 请拨打tour阅读How to Ask

标签: java android string


【解决方案1】:

假设你的字符串对于语法来说是 100% 准确的,我提供了这个解决方案:

\\\\left\\.\\s+\\\\beginarray\\s+l\\s+([\\d\\s\\+=\\-*\\/%^x-z]+)\\s+\\\\\\s+([\\d\\s\\+=\\-*\\/%^x-z]+)\\s+\\\\\\s+([\\d\\s\\+=\\-*\\/%^x-z]+)\\s+\\\\endarray\\s+\\\\right\\.

使用此正则表达式模式,您会收到以下字符串

Group1 == "2 x + 3 y + 3 z = 8"
Group2 == "3 x + y + 2 z = 10"
Group3 == "8 x + 9 x + 10 z = 12"

请注意,这已经是一个 Java 字符串。纯“正则表达式”是

\\left\.\s+\\beginarray\s+l\s+([\d\s\+=\-*\/%^x-z]+)\s+\\\s+([\d\s\+=\-*\/%^x-z]+)\s+\\\s+([\d\s\+=\-*\/%^x-z]+)\s+\\endarray\s+\\right\.

此外,这将匹配您的字符串和包含的 (3) 公式,但如果您更改数字,它将不再起作用。还有很多其他的事情可能会打破这一点。 它看起来有点像你的语法应该描述一棵树:

left
  beginarray
    [formula]+
  endarray
right

假设这只是更大语法的一部分,并且元素之间可能还有其他东西(例如另一个数组),那么您需要的不仅仅是正则表达式。您需要定义一个语法并对其进行分析。

【讨论】: