我完全无法弄清楚如何编写模式,用我的正则表达式来实现乳胶中的嵌套分数。
以下是几个示例用户输入:
\\Final version with closing "moveout" phrase
regexPattern = Pattern.compile(fraction(?<upper>.*?)over(?<lower>.*?)moveout);
regexMatcher = regexPattern.matcher(userInput);
mathFormulaInLaTeX = regexMatcher.replaceAll(\\frac{${upper}} {${lower}});
\\Starting version without "over" keyword
regexPattern = Pattern.compile(fraction(?<upper>.*));
regexMatcher = regexPattern.matcher(userInput);
mathFormulaInLaTeX = regexMatcher.replaceAll(\\frac{${upper}} {});
这是我的正则代码(我制作了部分版本):
temp
通过以下输入,我得到了结果:
输入:&#34; fractionx + 3over5moveout + 2&#34;
输入:&#34; fractionfractionx + 1&#34;
(启动版本没有&#34; over&#34;关键字,嵌套分数无法正常工作)
输入:&#34; fractionfractionx + 1over7moveoutover3moveout + 1&#34;
(带有嵌套分数的最终正则表达式版本添加了moveout单词)
输入:&#34; fractionfractionfractionx + 3over3moveoutoverx + 2moveoutover7moveout + 1&#34;
(完全错误分类)
对于任何数量的嵌套分数,是否有一个整洁的模式解决方案,以摆脱&#34; moveout&#34;单词显示并使嵌套分数像这样:
我感谢任何帮助。
答案 0 :(得分:2)
正如评论中所说,这不是一个好主意。数学表达式,即使是简单的表达式,也不是regular language - 它们是context-free grammar。虽然假设有match使用现代正则表达式引擎的任意数学表达式,但尝试用它们解析一个充其量是蛮干的。我建议使用rolling your own lexical analyzer或使用类似ANTLR的内容。