如何解决如何使用python和BeautifulSoup在xml中提取父元素的标签
例如,我有这样的xml
<managedObject class="New" distName="MB-85404/TB-85404/ST-4/a" version="xL20A_1911_002" operation="open">
<p name="a">320ms</p>
<p name="b">enabled</p>
<p name="c">640ms</p>
<p name="d">320ms</p>
<p name="e">640ms</p>
<p name="f">1280ms</p>
<p name="g">6</p>
</managedObject>
<managedObject class="new" distName="AL-76867/MB-85404/TB-85404/ST-4/b" version="xL20A_1911_002" operation="open">
<p name="h">320ms</p>
<p name="i">enabled</p>
<p name="j">640ms</p>
<p name="k">320ms</p>
<p name="l">640ms</p>
<p name="a">1280ms</p>
<p name="l">6</p>
</managedObject>
<managedObject class="New" distName="MB-85404/TB-85404/ST-4/c" version="xL20A_1911_002" operation="open">
<p name="a">320ms</p>
<p name="p">enabled</p>
<p name="q">640ms</p>
<p name="r">320ms</p>
<p name="s">640ms</p>
<p name="t">1280ms</p>
<p name="u">6</p>
</managedObject>
如果特定的正则表达式匹配,我想从中提取distName。 例如
pattern = re.compile('MB-\d/TB-\d/ST-\d/')
for i in Soup.find_all('managedObject',{'distName':pattern}):
如果distName与模式提取distName匹配 其他 离开它。
我尝试了一些东西,但无法通过。
解决方法
您的正则表达式在开头+
和\d
之后似乎缺少^
的符号。另外,如果您使用html.parser
,则标记和属性的名称必须小写(txt
是您所质疑的XML代码段):
soup = BeautifulSoup(txt,'html.parser')
pattern = re.compile(r'^MB-\d+/TB-\d+/ST-\d+/.*')
for i in soup.find_all('managedobject',{'distname':pattern}):
print(i['distname'])
打印:
MB-85404/TB-85404/ST-4/a
MB-85404/TB-85404/ST-4/c
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。