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

如何编写正则表达式提取<SHORT-NAME>标签内的数据?

正则表达式提取标签内容的正确写法

问题描述

现有数据:data="<SHORT-NAME>WhlDist_Prtctd_PDU_PA_CAN_1_controller</SHORT-NAME>"
尝试使用正则语句:print(re.search('<SHORT-NAME>("^WhlDist\\w.*controller$")<\\/\\1>', data)),输出结果为None,期望提取内容为:WhlDist_Prtctd_PDU_PA_CAN_1_controller

原正则的问题

  • 错误使用反向引用\1:\1会引用捕获组内的内容,但闭合标签是固定的</SHORT-NAME>,不是捕获的目标字符串,导致匹配失败。
  • 多余的引号和锚点:^和$是匹配字符串首尾的锚点,但目标内容被标签包裹,并非整个字符串的首尾;额外的引号也不属于原数据结构。

正确写法

方法1:提取标签间任意内容

适用于只需要提取<SHORT-NAME>和</SHORT-NAME>之间所有内容的场景:

import re
data = "<SHORT-NAME>WhlDist_Prtctd_PDU_PA_CAN_1_controller</SHORT-NAME>"
match_result = re.search(r'<SHORT-NAME>(.*?)<\/SHORT-NAME>', data)
if match_result:
    print(match_result.group(1))  # 输出目标内容
  • 注:.*?是非贪婪匹配,避免在存在多个<SHORT-NAME>标签时,匹配到超出预期的内容。

方法2:精准匹配特定格式内容

如果需要确保提取的内容以WhlDist开头、controller结尾,可以用:

import re
data = "<SHORT-NAME>WhlDist_Prtctd_PDU_PA_CAN_1_controller</SHORT-NAME>"
match_result = re.search(r'<SHORT-NAME>(WhlDist\w.*?controller)<\/SHORT-NAME>', data)
if match_result:
    print(match_result.group(1))
  • 注:\w匹配字母、数字或下划线,.*?非贪婪匹配中间内容,保证只提取符合格式的目标字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:54:39