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

如何使用正则按用户维度提取data dump中IFSC等字段生成结构化数据

实现方案

你可以通过单用户块匹配的方式避免列表错位问题,有两种常用实现方式:

方案1:正则一次性捕获(效率更高,适合字段完整度高的场景)

直接通过带捕获组的正则匹配单个用户的所有关联字段,代码如下:

import re

# 你的原始数据
raw_content = """
00~XXXXXXXXXXXXXX24~
01~John~Doe~Bank~Name~XXXXXXX00~ABCD0123456~
其他非必要数据
00~XXXXXXXXXXXXXX23~
01~Jane~Doe~Bank~Name~XXXXXXX00~ABCD0123456~
其他非必要数据
"""

user_pattern = re.compile(
    r"00~(\d{16})~.*?01~.*?Bank~Name~(\d{9})~([A-Z]{4}0[A-Z0-9]{6})~",
    flags=re.DOTALL # 支持跨行匹配
)

output = []
for match in user_pattern.finditer(raw_content):
    demat, micr, ifsc = match.groups()
    output.append({
        "demat_id": demat,
        "micr_code": micr,
        "ifsc_code": ifsc
    })

方案2:分块单独匹配(容错性更高,适合存在字段缺失的场景)

先按用户数据边界拆分内容,再对每个用户块单独匹配字段,缺失字段默认赋值为None:

import re

raw_content = """你的原始数据"""
output = []
# 按00开头的用户标识拆分所有用户块
user_blocks = re.split(r"(?=00~\d{16}~)", raw_content)

for block in user_blocks[1:]: # 跳过拆分出来的空首元素
    # 逐个匹配字段,不存在则留空
    demat = re.search(r"00~(\d{16})~", block)
    micr = re.search(r"Bank~Name~(\d{9})~", block)
    ifsc = re.search(r"[A-Z]{4}0[A-Z0-9]{6}", block)
    output.append({
        "demat_id": demat.group(1) if demat else None,
        "micr_code": micr.group(1) if micr else None,
        "ifsc_code": ifsc.group(0) if ifsc else None
    })

两种方案最终输出的output都是字典组成的列表,每个字典对应一个用户的关联信息,不会出现字段错位的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:12:01