You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用正则表达式解析XML并通过id标签查找元素

用正则从XML片段中按ID查找元素

嘿,我懂你在这个特定场景下想用正则来抓取指定ID的XML元素——虽然通常我会更推荐用专门的XML解析库(比如Python里的xml.etree.ElementTree),毕竟正则处理复杂XML容易踩坑,但既然你确认这是适合你的方案,那咱们来把这个正则写到位。

先看你提供的原始XML片段:

<form id="main">
<input {disable} style="display:none" id="CALLERID" value="58713780">
<input {disable} style="display:none" id="GR_BUS" value="VGH1">
<td><input id="label" {disable} style="font-size:9px;width:100%;margin:0;padding:1;" type=text></td>
</form>

基础方案:匹配指定ID的input元素

如果只是想找到包含目标ID的整个input标签,或者提取ID值,可以用这个正则:

import re

# 匹配指定ID的input标签(捕获整个标签和对应的ID)
pattern = r'(<input[^>]*id="?(CALLERID|GR_BUS|label)"?[^>]*)>'
matches = re.findall(pattern, line)

# 遍历结果查看匹配到的内容
for match in matches:
    print("完整标签:", match[0])
    print("匹配的ID:", match[1])

正则的关键部分解释:

  • [^>]*:匹配除了>之外的任意字符,用来跳过ID属性前后的其他属性(比如style、{disable}这些)
  • "?:匹配可选的双引号,因为你的片段里有些属性没有加引号(比如type=text),兼容ID带引号和不带引号的情况
  • (CALLERID|GR_BUS|label):精准匹配你要找的三个ID值

进阶:提取对应ID的value属性

如果还要获取目标ID对应的value值,可以针对每个ID写更精准的正则,比如提取CALLERID的value:

callerid_pattern = r'<input[^>]*id="?CALLERID"?[^>]*value="?([^"]*)"?[^>]*>'
result = re.search(callerid_pattern, line)
if result:
    print("CALLERID的value值:", result.group(1))  # 输出:58713780

小提醒

虽然这个正则能完美应付你当前的片段,但如果之后XML结构变得复杂(比如出现嵌套标签、属性值里包含特殊字符),正则很容易失效。如果场景允许,还是建议用XML解析库来处理,会更稳定可靠。

内容的提问来源于stack exchange,提问作者johnred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:07:05