用生成的图像替换xml标记(python regex)

时间:2013-06-24 16:25:02

标签: python xml regex

我正在编写应用程序,将主要包含在xml文件中的数据转换为静态html。在xml中的任何一点,都可能有一个像这样的嵌套标签:

<t:latex-object url='%28-3%29%5E%7B2%7D%3D3%5E%7B2%7D'><![CDATA[(-3)^{2}=3^{2}]]></t:latex-object>

我必须使用url,从中生成乳胶图像,并用html中的img src替换此标记。

我现在正在做的是,通过整个xml文件并生成html输出,保留这些标签。接下来,我想查看整个输出,找到所有出现的标记,为每个标记生成图像,然后替换它们。但是,由于url属性不同,每次我都不能使用replace()函数。

我正在考虑使用正则表达式,但到目前为止我所有的url属性列表都令人头疼。我正在考虑编写正则表达式,它只用url属性替换所有的乳胶标签,这样我就可以遍历我的url列表并用生成的图像替换它们。

这种方法有意义吗?我觉得应该有更简单的方法来做到这一点,更不用说我花了一个多小时试图编写这样的正则表达式,效果不佳。

2 个答案:

答案 0 :(得分:2)

描述

此正则表达式将捕获整个标记和url属性。请注意,如果此标记具有嵌套的t标记值,则会失败。

<t:latex-object\b(?=\s)(?=(?:(?![^>])'[^']*'|"[^"]*"|.)*\surl='([^"]*)').*?<\/t:latex-object>

enter image description here

Python示例

工作示例在这里http://repl.it/J0t/1,在示例中我注意到我正在逃避一些引号。

<强>代码

import re

string = """
<t:latex-object url='%28-3%29%5E%7B2%7D%3D3%5E%7B2%7D'><![CDATA[(-3)^{2}=3^{2}]]></t:latex-object>
""";

for matchObj in re.finditer( r'<t:latex-object\b(?=\s)(?=(?:(?![^>])\'[^\']*\'|"[^"]*"|.)*\surl=\'([^"]*)\').*?<\/t:latex-object>', string, re.M|re.I|re.S):
    print "-------"
    print "matchObj.group(0) : ", matchObj.group(0)
    print "matchObj.group(1) : ", matchObj.group(1)

<强>输出

matchObj.group(0) :  <t:latex-object url='%28-3%29%5E%7B2%7D%3D3%5E%7B2%7D'><![CDATA[(-3)^{2}=3^{2}]]></t:latex-object>
matchObj.group(1) :  %28-3%29%5E%7B2%7D%3D3%5E%7B2%7D

答案 1 :(得分:0)

正则表达式解析XML永远不是一个好主意。在我看来,你应该在Python脚本中使用正确的XML解析器。或者使用XSLT。