使用模式匹配从字符串中获取方程式

时间:2018-08-10 05:12:56

标签: java android string

当我单击数学方程式相机的照片时。MathpixAPI给出这样的响应:

“ \ 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 个答案:

答案 0 :(得分: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

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