<p>regex是解析xml的正确方法。在</p>
<p>下面是一个简单的独立示例,它使用<code>lxml</code>:</p>
<pre><code>from lxml import etree
text="""<clipPath id="p54dfe3d8fa">
<path d="M 112.176 307.8
L 112.176 307.8
L 174.672 270
L 241.632 171.72
L 304.128 58.32
L 380.016 171.72
L 442.512 217.08
L 491.616 141.48
L 491.616 307.8
z
"/>
</clipPath>
<clipPath id="p27c84a8b3c">
<rect height="302.4" width="446.4" x="72.0" y="43.2"/>
</clipPath>"""
# This creates <metrics>
root = etree.XML("<X>"+text+"</X>")
p = root.find(".//path")
print(p.get("d"))
</code></pre>
<p>结果:</p>
^{pr2}$
<ul>
<li>首先,我创建主节点。因为有几个节点,所以我把它包装在一个任意的主节点中</li>
<li>然后我在任何地方寻找“路径”</li>
<li>一旦找到,我就得到<code>d</code>属性</li>
</ul>
<p>现在我要更改<code>d</code>的文本并将其转储:</p>
<pre><code>p.set("d","[new text]")
print(etree.tostring(root))
</code></pre>
<p>现在输出如下:</p>
^{4}$
<p>尽管如此,快速和肮脏,可能对几个<code>path</code>节点不够健壮,但是可以使用您提供的代码片段(我不是xml专家,只是在摸索)</p>
<p>顺便说一句,另一种黑客/非正则表达式的方法:使用多字符<code>split</code>:</p>
<pre><code>text.split(' d="')[1].split('"/>')[0]
</code></pre>
<p>将第二部分放在d分隔符之后,然后将第一部分放在<code>/></code>分隔符之后。保留多行格式。在</p>