用于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>

只想捕获看起来是标签本身的“”。所以基本上我需要一个正则表达式来捕获 到 之间的任何内容 请注意,这是 ncclient 包回复的一部分。我尝试使用他们的方法来提取对象中的数据,但它们不起作用。我也尝试使用 lxml 和 beautifulsoup,它们也不起作用。 我现在只想使用正则表达式。

尝试了以下方法,但似乎没有任何效果:

<rpc-reply.*>(.*)</rpc-reply>

【问题讨论】:

使用.//rpc-reply/*的xpath语句获取节点&lt;ok/&gt;Demo 不要!不要对 XML 进行正则表达式!有用于解析 XML 的模块,使用它们,它们的存在是有充分理由的。 你的表达几乎是正确的。你需要知道 / 特殊字符,你应该在它前面加上 \。 您也可以将 (.*) 替换为 ([\w\W\s]*)。 不要使用以下建议。 Here 是答案,使用 azy .*?re.DOTALL 选项。否则,使用(?:.*?) 使特定的点模式跨行匹配。 【参考方案1】:

我相信您错过了对反斜杠进行缩放并考虑最终的多行。结果应如下所示:

<rpc-reply.*?>((.|\n)*?)<\/rpc-reply>

P.S.:也可以根据用例研究 XML 解析模块(如 ElementTree)。

【讨论】:

永远不要在正则表达式中使用(.|\n)*。这充满了灾难性的回溯。

以上是关于用于python的正则表达式来捕获两个XML标签之间的所有内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于捕获嵌套括号中的值的正则表达式

正则表达式之补获性分组与非补获性分组

[Python正则表达式] 字符串中xml标签的匹配

用于捕获组的正则表达式无法识别

正则表达式从 IBAN 捕获 BBAN?

用于匹配任意两个 HTML 标签的正则表达式