python - 用生成的图像替换 xml 标签(python 正则表达式)

标签 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,从中生成 latex 图像,并用 html 中的 img src 替换该标签。

我现在正在做的,是遍历整个 xml 文件并生成 html 输出,使这些标签保持原样。接下来,我想检查整个输出,找到此标签的所有出现位置,为每个标签生成图像,然后替换它们。但是,由于 url 属性每次都不同,因此我无法使用 Replace() 函数。

我正在考虑使用正则表达式,但到目前为止我得到的只是所有 url 属性的列表和头痛。我正在考虑编写正则表达式,它将所有 latex 标签替换为它们的 url 属性,这样我就可以迭代我的 url 列表并将它们替换为生成的图像。

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

最佳答案

描述

此正则表达式将捕获整个标记和 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

关于python - 用生成的图像替换 xml 标签(python 正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17280315/

相关文章:

mysql - XML 文件作为使用 ColdFusion 的 SQL 的查询数据

c# - 使用正则表达式从字符串中检索数字

javascript - 简单的电子邮件正则表达式,确保用户包含点域?

python - Django 1.4syncdb + psycopg 因时区错误而失败

javascript - 在 Javascript 中解析 XML

javascript - 如何使用 Node.js 检查字符串是否为 xml

Python 理解正则表达式

python - 在 R 和 python 中运行 Keras

python - 从提取的链接中去除 html 标签

python - 如何使用字典理解+ if/else 更改字典中的键值?