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

如何用正则表达式从数据手册提取寄存器信息?分组匹配遇阻求助

解决寄存器信息正则提取与CSV导出问题

你提到想用正则从数据手册里提取寄存器名称、地址、枚举值这类信息,在regexr上处理复杂场景卡壳,尤其是多分组导出CSV的时候碰到麻烦——我完全懂这种头疼的感觉!针对你给出的匹配模式和期望输出,我整理了一套实用的方案:

目标匹配逻辑拆解

先明确你要抓取的核心内容结构:

  • 寄存器名称:A2B_ 开头的标识(比如A2B_NODEADR)
  • 寄存器地址:0x 开头的两位十六进制值(比如0x01)
  • 枚举值:大写字母组成的多个可选标识(比如BRCST、NODE)

定制化正则表达式

这里给出适配你需求的正则,带明确分组,方便后续导出:

(A2B_\w+).*?Address:\s*(0x[0-9A-Fa-f]{2}).*?(?:([A-Z]+)(?:,\s*([A-Z]+))*(?:,\s*([A-Z]+))*)?

分组说明:

  • 第1组 (A2B_\w+):精准匹配寄存器名称,\w+ 能覆盖任意字母、数字或下划线后缀,适配不同命名的寄存器
  • 第2组 (0x[0-9A-Fa-f]{2}):严格匹配两位十六进制的地址格式,不管大小写都能捕获
  • 第3-5组:最多捕获3个枚举值(如果你的枚举值数量更多,只需要重复(?:,\s*([A-Z]+))*这个结构即可)

匹配与CSV导出实操技巧

方式1:用编辑器快速处理(比如VS Code)

  1. 打开数据手册文本,开启正则查找模式
  2. 输入上面的正则,确认所有目标条目都能被匹配到
  3. 切换到替换模式,用$1, $2, $3, $4, $5作为替换内容(空的分组会自动留空)
  4. 把替换后的内容复制出来,保存为.csv文件即可

方式2:用Python脚本灵活处理(适合大量数据)

如果数据手册内容很多,用脚本更高效,还能自动处理空值:

import re
import csv

# 把data替换成你的数据手册文本内容
data = """这里粘贴你的数据手册文本"""
pattern = r"(A2B_\w+).*?Address:\s*(0x[0-9A-Fa-f]{2}).*?(?:([A-Z]+)(?:,\s*([A-Z]+))*(?:,\s*([A-Z]+))*)?"
# 用re.DOTALL让.匹配换行符,re.IGNORECASE兼容小写十六进制
matches = re.finditer(pattern, data, re.DOTALL | re.IGNORECASE)

with open("registers.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    # 先写表头
    writer.writerow(["Register Name", "Address", "Enum Value 1", "Enum Value 2", "Enum Value 3"])
    for match in matches:
        # 把分组内容转成列表,空分组用空字符串填充
        row = [match.group(i) or "" for i in range(1, 6)]
        writer.writerow(row)

运行这个脚本后,会生成一个registers.csv文件,格式完全符合你期望的输出。

小提示

如果数据手册里的排版很乱(比如换行、空格不规律),记得保留re.DOTALL参数;如果地址里有小写的十六进制字母,加上re.IGNORECASE就能完美兼容。

内容的提问来源于stack exchange,提问作者David Nottebohm-Knochenhauer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:56:36