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

时间:2014-08-15 05:30:56

标签: python regex

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

现在我想在数学模式下将此输出添加到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      

1 个答案:

答案 0 :(得分:1)

您可以使用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')

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