Tim*_*Tim 5 python mathml pexpect
我遇到了麻烦pexpect。我试图tralics从中读取乳胶方程的输出并发出 MathML 表示,如下所示:
1 ~/ % tralics --interactivemath
This is tralics 2.14.5, a LaTeX to XML translator, running on tlocal
Copyright INRIA/MIAOU/APICS/MARELLE 2002-2012, Jos\'e Grimm
Licensed under the CeCILL Free Software Licensing Agreement
Starting translation of file texput.tex.
No configuration file.
> $x+y=z$
<formula type='inline'><math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mi>x</mi> <mo>+</mo><mi>y</mi><mo>=</mo><mi>z</mi></mrow></math></formula>
>
Run Code Online (Sandbox Code Playgroud)
所以我尝试使用 pexpect 得到公式:
import pexpect
c = pexpect.spawn('tralics --interactivemath')
c.expect('>')
c.sendline('$x+y=z$')
s = c.read_nonblocking(size=2000)
print s
Run Code Online (Sandbox Code Playgroud)
输出具有公式,但开头是原始输入,结尾是一些控制字符:
"x+y=z$\r\n<formula type='inline'><math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo>=</mo><mi>z</mi></mrow></math></formula>\r\n\r> \x1b[K"
Run Code Online (Sandbox Code Playgroud)
我可以清理输出字符串,但我必须缺少一些基本的东西。有没有更干净的方法来获得 MathML?
据我了解,您正试图从 pexpect 中得到这个:
<formula type='inline'><math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mi>x</mi> <mo>+</mo><mi>y</mi><mo>=</mo><mi>z</mi></mrow></math></formula>
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式而不是 ">" 进行匹配以获得预期结果。这是最简单的例子:
c.expect("<formula.*formula>");
Run Code Online (Sandbox Code Playgroud)
之后,您可以通过调用 pexpect 的 match 属性来访问匹配的字符串:
print c.match
Run Code Online (Sandbox Code Playgroud)
您也可以尝试不同的正则表达式,因为我发布的正则表达式是一个贪婪的正则表达式,如果公式很大,它可能会阻碍您的执行时间。
| 归档时间: |
|
| 查看次数: |
7407 次 |
| 最近记录: |