【发布时间】: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 中的实现,用于提取 <test1> 和 </test1> 之间的所有文本:
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"<test1[\s\S]*?<\/test1>", escaped_raw_data)我仍然得到None的结果 -
是的。但是,我并不精通 Python。只是想帮助您使用正则表达式。让 python 专家也看到你的问题并尝试回答
-
试试
result = re.search(r"<test1>.*<\/test1>", escaped_raw_data, re.DOTALL)。