假设我有一个输出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
答案 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')
但是,请注意,这是一个相当脆弱的解决方案 - 例如,如果您有任何不打算下标的数字,它就会失败。