首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用生成的图片替换xml标签(python regex)

用生成的图片替换xml标签(python regex)
EN

Stack Overflow用户
提问于 2013-06-25 00:25:02
回答 2查看 106关注 0票数 1

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

代码语言:javascript
复制
<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列表,并用生成的图像替换它们。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-25 00:53:09

描述

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

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

Python示例

工作示例是这里的http://repl.it/J0t/1,请注意在示例中我转义了一些引号。

代码

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-06-25 00:30:47

正则表达式从来都不是解析XML的好主意。在我看来,您应该在Python脚本中使用适当的XML解析器。或者使用XSLT。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17280315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档