我有以下文字:

string = "<i>R</i> subspace  <i>{V.</i> generated by <i>{v<sub>1</sub>,...,v<sub>i</sub></i>, "

细心的读者可能会注意到缺少两个括号。
我想知道,如何使用python修复这个问题?
预期产出将是:
the <i>R</i>  subspace  <i>{V.}</i> generated by <i>{v<sub>1</sub>,...,v<sub>i</sub>}</i>,

一个人可以:
检查:<i>后是否有支架?
如果是->在</i>之前是否有括号?
我不知道怎么编码。任何帮助都将不胜感激。
编辑1:
我找到了this code,可以告诉你括号是否匹配。

最佳答案

下面的regex解决方案如何:

import re

string = "<i>R</i> subspace  <i>{V.</i> generated by <i>{v<sub>1</sub>,...,v<sub>i</sub></i>, "
expected = "<i>R</i> subspace  <i>{V.}</i> generated by <i>{v<sub>1</sub>,...,v<sub>i</sub>}</i>, "

fixed = re.sub(r"<(?P<tag>.*?)>({.*?)</(?P=tag)>", r"<\1>\2}</\1>", string)

print(fixed == expected) # True

这样做的目的是匹配一个后面跟着一个大括号的标记,找到它的结束标记,并在结束标记之前使用捕获组作为<\1>\2}</\1>。故障:
< # literal opening bracket
 (?P<tag> # open a named capture group
         .*? # lazily match any characters
            ) # end named capture group
             > # literal closing bracket
              ( # open capture group 2
               { # literal opening brace
                .*? # lazily match any characters
                   ) # end capture group 2
                    < # literal opening bracket
                     / # literal slash
                      (?P=tag) # backreference to the named group
                              > # literal closing bracket

如果您只想<i>,可以使用re.sub(r"<i>({.*?)</i>", r"<i>\1}</i>", string)

关于python - 使用Python修复HTML字符串中的开括号问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55641223/

10-11 06:19
查看更多