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

如何解析文件返回无数字的大写行列表?及标题提取循环实现方案

解决方案:不用正则搞定两个文件解析问题

嘿,我来帮你搞定这两个问题!完全不用正则,咱们用基础的循环和字符串方法就能解决,一步步来:


问题1:提取不含数字的大写行列表

这个需求其实很直接,核心就是两个判断条件:行中没有数字 + 所有字母都是大写(注意空格这类非字母字符不影响isupper()的判断)。

直接上代码:

def get_upper_lines_without_numbers(file_path):
    valid_lines = []
    with open(file_path, 'r', encoding='utf-8') as file:
        for raw_line in file:
            # 先去掉首尾的换行/空格
            cleaned_line = raw_line.strip()
            # 跳过空行
            if not cleaned_line:
                continue
            # 检查是否包含数字,有数字就跳过
            if any(char.isdigit() for char in cleaned_line):
                continue
            # 检查所有字母是否都是大写(非字母字符会被忽略)
            if cleaned_line.isupper():
                valid_lines.append(cleaned_line)
    return valid_lines

代码说明:

  • cleaned_line.isupper()会自动忽略空格、标点这类非字母字符,所以像"HELLO WORLD"这种带空格的大写行也能被正确匹配,而"HeLLO"这种混合大小写的行就会被排除。
  • any(char.isdigit()...)用来快速判断行中是否存在数字,有就直接跳过。

问题2:提取纯标题(排除副标题/正文)

你提到用isupper()会误取副标题,那咱们得先给标题和副标题加一些区分特征——毕竟不同文件的格式不一样,我给你两种常见场景的解决方案,你可以根据自己的文件调整:

场景A:标题是全大写,副标题是紧跟标题的非全大写行

如果你的文件结构是「标题(全大写)→ 副标题(首字母大写/混合大小写)→ 正文」,那我们可以通过判断下一行是否为全大写来区分:

def get_only_titles(file_path):
    titles = []
    with open(file_path, 'r', encoding='utf-8') as file:
        # 先预处理:去掉空行,保留非空行的内容
        non_empty_lines = [line.strip() for line in file if line.strip()]
        
        for idx, line in enumerate(non_empty_lines):
            # 先满足问题1的基础条件:全大写+无数字
            if not line.isupper() or any(char.isdigit() for char in line):
                continue
            # 判断是否是标题:要么是最后一行,要么下一行不是全大写
            if idx == len(non_empty_lines) - 1:
                titles.append(line)
                continue
            next_line = non_empty_lines[idx+1]
            if not next_line.isupper():
                titles.append(line)
    return titles

场景B:标题是长全大写行,副标题是短全大写行

如果你的副标题也是全大写,但长度明显比标题短,那可以加一个长度阈值来过滤:

def get_only_titles_by_length(file_path, min_title_length=7):
    titles = []
    with open(file_path, 'r', encoding='utf-8') as file:
        for raw_line in file:
            cleaned_line = raw_line.strip()
            if not cleaned_line:
                continue
            # 基础条件:全大写+无数字
            if not cleaned_line.isupper() or any(char.isdigit() for char in cleaned_line):
                continue
            # 过滤短的全大写行(副标题)
            if len(cleaned_line) >= min_title_length:
                titles.append(cleaned_line)
    return titles

灵活调整提示:

如果你的副标题有其他特征(比如带破折号、下划线,或者是特定格式),可以再加对应的判断条件,比如if '-' in cleaned_line: continue来排除带破折号的副标题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:56:52