首页 > 解决方案 > 正则表达式替换两个不同字符串之前或之后的字符串

问题描述

我有这个字符串(html):

html = 'x<sub>i</sub> - y<sub>i)<sub>2</sub>' 

我想以一种健壮的方式将此 html 字符串转换为乳胶。让我解释:

  1. <sub>SOMETHING</sub>-> 转换为_{SOMETHING}

我已经知道该怎么做:

latex = re.sub(r'<sub>(.*?)</sub>',r'_{\1} ', html)
  1. 有时缺少第一部分<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}

标签: pythonregex

解决方案


假设你有被分割成不同部分的文本,对应的<sub>/</sub>标签可能位于相邻的段中,所以只需分别替换它们就足够了,你不需要做任何猜测工作。

只需使用

text = text.replace('<sub>', '_{').replace('</sub>', '}')

在任何情况下<sub>_{</sub>用替换每个。}


推荐阅读