如何解析文件返回无数字的大写行列表?及标题提取循环实现方案
解决方案:不用正则搞定两个文件解析问题
嘿,我来帮你搞定这两个问题!完全不用正则,咱们用基础的循环和字符串方法就能解决,一步步来:
问题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
相关产品推荐
相关产品推荐

