1

我正在编写应用程序来将主要包含在 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 输出,让这些标签保持原样。接下来,我想遍历整个输出,找到所有出现的这个标签,为每个标签生成图像,然后替换它们。但是,由于每次我不能使用 replace() 函数时 url 属性都不同。

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

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

4

2 回答 2

2

描述

此正则表达式将捕获整个标记和 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-24T16:53:08.677 回答
0

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

于 2013-06-24T16:30:46.600 回答