微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Java从字符串中查找Mathmls

如何解决使用Java从字符串中查找Mathmls

| 我有一个包含多个mathml的大字符串。想要将所有字符串都取出来。使用正则表达式查找它们。但是正则表达式中缺少某些内容,因此它不提供任何输出。 MathMls的正则表达式是什么? 字符串示例   查找«math xmlns = \\\“ http://www.w3.org/1998/Math/MathML \\\”»«mroot»«mrow»«mi»#«/ mi»«mi»a«的总和/ mi»«/ mrow»«mn»3«/ mn»«/ mroot»«mo»=«/ mo»«mroot»«mrow»«mi»#«/ mi»«mi»b«/ mi»« / mrow»«mn»3«/ mn»«/ mroot»«/ math»和«math xmlns = \\\“ http://www.w3.org/1998/Math/MathML \\\”»«mo »=«/ mo»«msup»«mfenced»«mrow»«mi»#«/ mi»«mi»b«/ mi»«/ mrow»«/ mfenced»«mfrac»«mn»1«/ mn» «mn»3«/ mn»«/ mfrac»«/ msup»«/ math» 从这得到2个数学     

解决方法

您不能使用Java的regex引擎执行此操作,因为这是有效的输入:
<math>
  <apply>
    <plus/>
    <apply>
      <times/>
      <ci>a</ci>
      <apply>
        <power/>
        <ci>x</ci>
        <cn>2</cn>
      </apply>
    </apply>
    <apply>
      <times/>
      <ci>b</ci>
      <ci>x</ci>
    </apply>
    <ci>c</ci>
  </apply>
</math>
即:可以有任意嵌套的标记,而Java的正则表达式引擎无法匹配递归模式。您将不得不使用一些解析器来处理MathML输入。 编辑   我可以将整个内容视为字符串,并找到匹配的模式吗?那就是我正在尝试的。并且在另一个标签内不会有任何递归标签。他们将处于同一水平。 在这种情况下,请尝试以下模式:
<math[>\\s](?s).*?</math>
或作为字符串文字:
\"<math[>\\\\s](?s).*?</math>\"
意思是:
<math[>\\s]   # match `<math` followed by a space or `>`
(?s).*?      # reluctantly match zero or more chars (`(?s)` causes `\\r` 
             # and `\\n` also to be matched)
</math>      # match `</math>`
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。