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

如何从表格XML列中提取所有被<form_id>包裹的SAP开头字符串?

提取XML列中<form_id>标签内的SAP开头字符串并生成逗号分隔列

以下针对不同常用场景提供解决方案:

一、SQL数据库场景

1. MySQL 8.0+ 实现

利用递归CTE遍历所有匹配项,再通过聚合函数拼接结果:

WITH RECURSIVE extract_form_ids AS (
    SELECT 
        id, -- 替换为你的表格主键字段
        xml_column,
        REGEXP_SUBSTR(xml_column, '<form_id>(SAP-[A-Z0-9-]+)</form_id>', 1, 1, 'c', 1) AS form_id,
        1 AS match_num
    FROM your_table -- 替换为你的表名
    UNION ALL
    SELECT 
        id,
        xml_column,
        REGEXP_SUBSTR(xml_column, '<form_id>(SAP-[A-Z0-9-]+)</form_id>', 1, match_num + 1, 'c', 1) AS form_id,
        match_num + 1
    FROM extract_form_ids
    WHERE form_id IS NOT NULL
)
SELECT 
    id,
    GROUP_CONCAT(form_id SEPARATOR ', ') AS extracted_form_ids
FROM extract_form_ids
WHERE form_id IS NOT NULL
GROUP BY id;

2. PostgreSQL 实现

借助全局匹配正则函数提取所有结果,再拼接成字符串:

SELECT 
    id, -- 替换为你的表格主键字段
    string_agg(match[1], ', ') AS extracted_form_ids
FROM your_table, -- 替换为你的表名
     regexp_matches(xml_column, '<form_id>(SAP-[A-Z0-9-]+)</form_id>', 'g') AS match
GROUP BY id;

二、Python Pandas 场景

针对DataFrame格式的表格数据,用字符串提取和分组聚合实现:

import pandas as pd

# 假设你的数据框为df,存储XML的列名为xml_column
df['extracted_form_ids'] = df['xml_column'].str.extractall(r'<form_id>(SAP-[A-Z0-9-]+)</form_id>') \
    .groupby(level=0)[0].apply(lambda x: ', '.join(x))

# 查看处理后的结果
print(df[['xml_column', 'extracted_form_ids']])

正则表达式说明

核心匹配规则 <form_id>(SAP-[A-Z0-9-]+)</form_id>:

  • <form_id>/</form_id>:精准匹配目标字符串的包裹标签
  • (SAP-[A-Z0-9-]+):捕获以大写SAP开头,后续由大写字母、数字、连字符组成的完整字符串,括号用于提取有效内容分组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:13:22