【问题标题】:Regex python encoded xml正则表达式 python 编码的 xml
【发布时间】:2018-02-04 03:15:57
【问题描述】:

我有一个 html 编码的 xml 有效负载,我想在其中使用正则表达式来提取该 xml 的某个部分并将其写入文件。我知道对 xml 使用正则表达式通常不是一个好习惯,但我认为这是一个特殊的用例。

无论如何这里是一个示例编码的 xml:

<root>
    <parent>
        <test1>
            <another>
                <subelement>
                    <value>hello</value>
                </subelement>
            </another>
        </test1>
    </parent>
</root>

我最终希望我的结果是:

<test1>
    <another>
        <subelement>
            <value>hello</value>
        </subelement>
    </another>
</test1>

这是我在 python 中的实现,用于提取 &lt;test1&gt;&lt;/test1&gt; 之间的所有文本:

import html
import re

file_stream = open('/path/to/test.xmp', 'r')
raw_data = file_stream.read()
escaped_raw_data = html.unescape(raw_data)

result = re.search(r"<test1[\s\S]*?<\/test1>", escaped_raw_data)

但是我没有得到结果匹配,我做错了什么?如何实现我的目标?

【问题讨论】:

  • 在您的正则表达式中,使用 [\s\S] 而不是 .,因为 . 不匹配换行符
  • @Gurman result = re.search(r"&lt;test1[\s\S]*?&lt;\/test1&gt;", escaped_raw_data) 我仍然得到None的结果
  • 是的。但是,我并不精通 Python。只是想帮助您使用正则表达式。让 python 专家也看到你的问题并尝试回答
  • 试试result = re.search(r"&lt;test1&gt;.*&lt;\/test1&gt;", escaped_raw_data, re.DOTALL)

标签: python regex xml


【解决方案1】:

这对我有用:

import html
import re

raw_data = '''
&lt;root&gt;
    &lt;parent&gt;
        &lt;test1&gt;
            &lt;another&gt;
                &lt;subelement&gt;
                    &lt;value&gt;hello&lt;/value&gt;
                &lt;/subelement&gt;
            &lt;/another&gt;
        &lt;/test1&gt;
    &lt;/parent&gt;
&lt;/root&gt;
'''

escaped_raw_data = html.unescape(raw_data)

result = re.search(r'(<test1>.*</test1>)', escaped_raw_data, re.DOTALL)

if result:
    print(result.group(0))

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 2016-09-22
    • 2015-04-29
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多