为tex数学模式格式化python输出?

为tex数学模式格式化python输出?,python,regex,Python,Regex,假设我有一个python脚本,它输出x0+x1*x2+y40+y1(带有下标和算术运算符的变量) 现在,我想以数学模式将此输出添加到tex文件中。因此,对于这种情况,我需要格式化的输出是: $x{0}+x{1}\ast x{2}+y{40}+y{1}$ (表达式由两个$括起,每个数字由{和}括起,*替换为\ast) 最好的方法是什么 我现在也解决不了。问题是下标数的长度是任意的 这是我天真而不成功的尝试: expr = 'x0+x1*x2+y40+y1' expr = expr.replace(

假设我有一个python脚本,它输出
x0+x1*x2+y40+y1
(带有下标和算术运算符的变量)

现在,我想以数学模式将此输出添加到
tex
文件中。因此,对于这种情况,我需要格式化的输出是:

$x{0}+x{1}\ast x{2}+y{40}+y{1}$

(表达式由两个
$
括起,每个数字由
{
}
括起,
*
替换为
\ast

最好的方法是什么

我现在也解决不了。问题是下标数的长度是任意的

这是我天真而不成功的尝试:

expr = 'x0+x1*x2+y40+y1'
expr = expr.replace('*', '\\ast ')
expr = expr.replace('x', 'x_')
expr = expr.replace('y', 'y_')

#import re

#for s in expr:
#   if re.match(r'\D', s):
#       print s,

expr = '$'+expr+'$'
print expr      

您可以使用
re.sub
方法用
{N}
替换出现的每个数字,并使用str.replace替换所有其他数字。模式
\d+
将匹配一个或多个后续数字

import re

def texify(text):
    text = re.sub('\d+', lambda match: '_{' + match.group(0) + '}', text)
    return '$' + text.replace('*', '\\ast ') + '$'

print texify('x0+x1*x2+y40+y1')

但是,请注意,这是一个相当脆弱的解决方案——例如,如果您有任何不是下标的数字,它将失败。

您可能需要尝试(特别是
math=Subsection('math that error',data=[math(data=['2*3','='9]))
line可能是您决定使用此库时代码的基础)。免责声明:我自己从来没有使用过这个,只是现在通过谷歌快速搜索找到了它。这几乎不需要正则表达式。您可能可以使用
string.replace()
。话虽如此,你试过什么吗?请给我们看一下好吗?如果您想自己做这件事,我建议您尝试获取表达式树,然后定义如何将表达式写入\LaTeX文件的规则。例如,表达式x1×x2将在根级别包含乘法运算符,并且作为叶x1和x2。所以乘法运算符的规则是打印\,而不是*符号。对于x1和x2,您可以执行字符串操作来查找数值分量,并将其放在下标上。我不知道Python中是否存在可用于获取表达式树的现有库。您可能需要修改:
textify
(以
a
的速度)内第一行的
text
,以及
\\ast
代替
\ast
:-)无论如何,谢谢。因为我当前的输出不包含任何协同效率,所以它可以正常工作。@pushpen.paul--哎哟!感谢您捕捉到这些拼写错误:)