我正在编写应用程序来转换包含在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,从它生成latex图像,并将此标记替换为html中的img src。
我现在所做的,是遍历整个xml文件,并生成html输出,使这些标记保持原样。接下来,我希望遍历整个输出,找到此标记的所有匹配项,为每个标记生成图像,并替换它们。但是,因为url属性每次都不同,所以我不能使用replace()函数。
我正在考虑使用regex,但到目前为止我得到的只是所有url属性的列表,这让我很头疼。我正在考虑编写regex,它会用url属性替换所有latex标签,这样我就可以遍历我的url列表,并用生成的图像替换它们。
这种方法有意义吗?我觉得应该有更简单的方法来做到这一点,更不用说我花了一个多小时试图编写这样的正则表达式,但结果很糟糕。
发布于 2013-06-25 00:53:09
描述
这个正则表达式将捕获整个标记和url属性。注意:如果此标记具有嵌套的t标记值,则此操作将失败。
<t:latex-object\b(?=\s)(?=(?:(?![^>])'[^']*'|"[^"]*"|.)*\surl='([^"]*)').*?<\/t:latex-object>

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发布于 2013-06-25 00:30:47
正则表达式从来都不是解析XML的好主意。在我看来,您应该在Python脚本中使用适当的XML解析器。或者使用XSLT。
https://stackoverflow.com/questions/17280315
复制相似问题