用于python的正则表达式来捕获两个XML标签之间的所有内容[重复]
Posted
技术标签:
【中文标题】用于python的正则表达式来捕获两个XML标签之间的所有内容[重复]【英文标题】:Regex for python to capture everything between two XML tags [duplicate] 【发布时间】:2021-09-18 22:47:51 【问题描述】:我正在尝试捕获“rpc-reply”标签之间的所有内容
<?xml version="1.0"?>
<rpc-reply message-id="urn:uuid:77a31474-ba9d-4b47-9b4f-60b6497143ed" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
只想捕获看起来是标签本身的“
尝试了以下方法,但似乎没有任何效果:
<rpc-reply.*>(.*)</rpc-reply>
【问题讨论】:
使用.//rpc-reply/*
的xpath语句获取节点<ok/>
Demo
不要!不要对 XML 进行正则表达式!有用于解析 XML 的模块,使用它们,它们的存在是有充分理由的。
你的表达几乎是正确的。你需要知道 / 特殊字符,你应该在它前面加上 \。
您也可以将 (.*) 替换为 ([\w\W\s]*)。
不要使用以下建议。 Here 是答案,使用 azy .*?
和 re.DOTALL
选项。否则,使用(?:.*?)
使特定的点模式跨行匹配。
【参考方案1】:
我相信您错过了对反斜杠进行缩放并考虑最终的多行。结果应如下所示:
<rpc-reply.*?>((.|\n)*?)<\/rpc-reply>
P.S.:也可以根据用例研究 XML 解析模块(如 ElementTree)。
【讨论】:
永远不要在正则表达式中使用(.|\n)*
。这充满了灾难性的回溯。以上是关于用于python的正则表达式来捕获两个XML标签之间的所有内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章