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

如何使用REGEX匹配首个标记第二次出现位置与第二个标记之间的数据

问题原因

你的代码不符合预期有两个核心原因:

  1. 正则中.默认不匹配换行符,无法识别XML中跨多行的标签内容
  2. 你的XML存在两层同名的<Address item="1">嵌套标签,原有正则会匹配到外层的起始标签,惰性匹配到第一个闭合标签时就返回,因此带了不需要的其他标签内容。

解决方案

方案1:修正正则规则(适合临时快速处理)

直接匹配内容不含其他标签的内层Address节点即可,不需要额外开启跨行匹配:

import re
# [^<]+ 匹配所有不含左尖括号的内容,自动避开嵌套标签
address_pattern = r'<Address item="1">([^<]+)</Address>'
cks_config = re.search(address_pattern, data).group(1).strip()
print(cks_config)

如果要严格匹配IP格式,可以把规则改成:
address_pattern = r'<Address item="1">(\d{1,3}(?:\.\d{1,3}){3})</Address>'

方案2:使用XML解析库(更稳定,推荐)

正则处理XML很容易因为格式变动、嵌套变化出问题,用Python内置的XML解析器更稳妥:

import xml.etree.ElementTree as ET

root = ET.fromstring(data)
# 遍历所有Address节点,取文本内容为IP的节点值
for addr_node in root.iter('Address'):
    node_text = addr_node.text.strip() if addr_node.text else ''
    if '.' in node_text:
        cks_config = node_text
        break
print(cks_config)

内容的提问来源于stack exchange,提问作者Surendranatha Reddy T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:06:02