我有这个字符串(html):
html = 'x<sub>i</sub> - y<sub>i)<sub>2</sub>'
我想以可靠的方式将此html字符串转换为乳胶。让我解释一下:
<sub>SOMETHING</sub>
->转换为_{SOMETHING}
我已经知道该怎么做:
latex = re.sub(r'<sub>(.*?)</sub>',r'_{\1} ', html)
<sub>
或它的结束标记,例如在示例字符串中。在这种情况下,输出应该仍然正确。所以我的想法是:运行1之后,我将<sub>
之后的字符串和</sub>
之前的字符串都用_{SOMETHING}
text = re.sub(r'<sub>(.*?)</sub>',r'_{\1} ', html)
print(text)
# if missing part:
text = re.sub(r'<sub>(.*?)',r'_{\1} ', text)
print(text)
latex = re.sub(r'(.*?)</sub>',r'_{\1} ', text)
…但是我得到了:
x_{i} - y_{i)<sub>2}
x_{i} - y_{i)_{} 2}
x_{i} - y_{i)_{} 2}
我想要得到什么:
x_{i} - y_{i})_{2}
答案 0 :(得分:2)
假设您将文本分为不同的部分,则相应的<sub>
/ </sub>
标签可能位于相邻的句段中,因此只需将它们分别替换一个就足够了,不需要做任何猜测。
只需使用
text = text.replace('<sub>', '_{').replace('</sub>', '}')
在任何情况下都用<sub>
替换每个_{
,并用</sub>
替换}
。
答案 1 :(得分:1)
对于不匹配的标记,您需要使用贪婪的正则表达式(即不使用?
),否则始终会得到零宽度的匹配。
>>> text = '1<sub>2'
>>> re.sub(r'<sub>(.*)', r'_{\1} ', text)
'1_{2} '
顺便说一句,在弄清楚这一点时,我注意到您可以像这样将后两个正则表达式放在一起:
re.sub(r'<sub>(.*)|(.*)</sub>', r'_{\1\2} ', text)