在python3中逃避XML字符串的未转义数据

时间:2014-03-05 13:16:16

标签: python xml regex escaping beautifulsoup

我想在xml字符串中转义未转义的数据 e.g。

string = "<tag parameter = "something">I want to escape these >, < and &</tag>"

"<tag parameter = "something">I want to escape these &gt;, &lt; and &amp;</tag>"
  • 现在,我绝对不能使用任何xml解析库,如xml.dom.minidom或xml.etree,因为数据未转义&amp;会给出错误
  • 在正则表达式中,我想办法匹配&amp;获取数据的开始和结束位置

    exp = re.search(">.+?</", label)
    # Get position of the data between tags
    start = exp.start() + 1
    end = exp.end() - 2
    return label[ : start] + saxutils.escape(label[start : end]) + label[end : ]
    
  • 但是在 re.search 中,我无法匹配确切的xml格式

  • 如果我使用 re.findall 我无法获得找到的子字符串的位置
  • 我总能通过索引找到找到的子字符串的位置,但效率不高,我想要一个简单但有效的解决方案
  • 欢迎使用BeautifulSoup解决方案,但我希望有一些更好的方法来使用python的基本库

1 个答案:

答案 0 :(得分:3)

也许你应该考虑re.sub

>>> oldString = '<tag parameter = "something">I want to escape these >, < and &</tag>'
>>> newString = re.sub(r"(<tag.*?>)(.*?)</tag>", lambda m: m.group(1) + cgi.escape(m.group(2)) + "</tag>", oldString)
>>> print newString
<tag parameter = "something">I want to escape these &gt;, &lt; and &amp;</tag>

我的警告是如果你有嵌套标签,正则表达式肯定会中断。见Why is it such a bad idea to parse XML with regex?