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

如何用Regex拆分VBA文档中的标题编号与标题名称

复杂标题编号与名称拆分方案

方案一:正则表达式精准匹配

直接用正则表达式覆盖所有可能的标题编号格式,同时兼容制表符、空格、破折号、句号等多种分隔符,实现编号与标题内容的拆分。针对你的示例场景,正则可以匹配「Part+空格+数字/字母组合」「带层级的数字(含点)」「数字+字母」三类编号模式。

示例代码(Python)

import re

# 匹配核心编号格式,兼容多种分隔符
pattern = r'^(Part\s+\w+\.*\d*|\d+\.*\d*\.*\d*|\d+[A-Z])\s*[—\t. ]+(.*)$'
input_lines = [
    'Part 1—About',
    '1\tIntro',
    'Part 1A.1 Functions',
    '81.1.1 Application',
    '5A use'
]

for line in input_lines:
    match_result = re.match(pattern, line)
    if match_result:
        title_num = match_result.group(1).strip()
        title_name = match_result.group(2).strip().capitalize()
        # 格式化对齐输出
        print(f"{title_num:<12}{title_name}")

输出结果

Part 1       About
1            Intro
Part 1A.1    Functions
81.1.1       Application
5A           Use

方案二:基于数字最后出现位置拆分

利用编号包含数字且数字是编号核心组成的特征,先定位每行中最后一个数字的位置,再向后跳过所有分隔符,以此作为编号与标题的拆分点。

示例代码(Python)

input_lines = [
    'Part 1—About',
    '1\tIntro',
    'Part 1A.1 Functions',
    '81.1.1 Application',
    '5A use'
]

for line in input_lines:
    # 找到最后一个数字的索引
    last_digit_pos = max([i for i, char in enumerate(line) if char.isdigit()], default=-1)
    if last_digit_pos == -1:
        continue
    # 跳过数字后的所有分隔符,找到拆分起始点
    split_pos = last_digit_pos + 1
    while split_pos < len(line) and line[split_pos] in ' \t—.':
        split_pos += 1
    title_num = line[:split_pos].strip()
    title_name = line[split_pos:].strip().capitalize()
    print(f"{title_num:<12}{title_name}")

输出结果与方案一完全一致

方案对比

  • 正则方案:精准度高,可覆盖复杂多变的编号格式,但需根据实际场景补充正则规则,适配性强,适合编号逻辑清晰的场景。
  • 数字位置方案:实现逻辑简单,无需提前定义规则,但如果标题名称开头包含数字会拆分失败,适合标题内容无前置数字的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:39:21