使用Python从文本文件特定COM注释模式中提取标题文本
实现逻辑
完全复用你之前用re.findall做关键字匹配的思路,不需要写复杂的逐行状态判断,直接通过多行正则匹配符合格式要求的COM注释块,一次性提取所有标题:
- 先锁定注释块的上下边界:两行均为
COM开头、后跟连续星号的分隔行 - 提取两个边界中间行的核心内容:去掉行首的
COM *标识和行尾的闭合*,剩余文本就是目标标题 - 提取结果直接生成列表,可直接遍历写入Excel的CATEGORY列
参考代码
标题提取核心函数
import re def extract_com_block_titles(file_path: str) -> list: # 读取目标文本文件内容 with open(file_path, 'r', encoding='utf-8') as f: file_content = f.read() # 正则匹配规则(多行模式),捕获组返回的内容就是纯标题 # 规则说明: # 1. 匹配上边界:行开头为COM + 空白字符 + 至少5个连续星号到行尾(兼容不同长度的星号分隔线) # 2. 匹配中间标题行:COM + 空格 + * + 空白 + 标题内容 + 空白 + * 到行尾 # 3. 匹配下边界:和上边界规则一致 match_pattern = re.compile( r'^COM\s+\*{5,}$\nCOM\s\*\s*(.*?)\s*\*$\n^COM\s+\*{5,}$', flags=re.MULTILINE ) # 和你之前提取CTG单引号内容的调用方式完全一致,直接返回所有匹配到的标题列表 title_list = match_pattern.findall(file_content) return title_list
写入Excel CATEGORY列参考
from openpyxl import load_workbook def save_titles_to_excel(title_list: list, excel_file_path: str, target_sheet: str = "Sheet1"): wb = load_workbook(excel_file_path) ws = wb[target_sheet] # 配置项:CATEGORY列对应C列,第1行是表头,从第2行开始写入数据,可根据实际表格结构调整 category_col = "C" start_row = 2 for index, title in enumerate(title_list): ws[f"{category_col}{start_row + index}"] = title wb.save(excel_file_path)
调用示例
if __name__ == "__main__": # 提取标题 titles = extract_com_block_titles("your_source_text.txt") print(f"共提取到{len(titles)}个标题:", titles) # 写入Excel save_titles_to_excel(titles, "your_target_excel.xlsx")
适配调整说明
- 如果你的注释块星号分隔线长度固定,可以把正则里的
\*{5,}改成对应长度的匹配规则,比如固定19个星号就写\*{19},降低误匹配概率 - 如果标题内容本身包含
*字符,把正则里的(.*?)改成(.*)即可,会自动匹配到行尾最后一个*前的全部内容 - 如果需要保留标题层级,可以在正则里额外匹配标题行前的缩进字符数,缩进量更大的标题对应子级分类,写入Excel时可同步添加层级标记
内容的提问来源于stack exchange,提问作者Y. Pat
相关产品推荐
相关产品推荐

