Python正则提取指定字符串区间内容及Name后行的方案咨询
解决方案
现有代码问题说明
- 提取Name下一行逻辑失败的核心原因:每次遍历都重新调用
gen()创建了独立的生成器实例,next(gen())不会返回当前遍历位置的下一行,而是返回新生成器的第一个元素,不符合预期。
正则实现方案
完全可以通过正则实现需求,且逻辑更简洁,完整代码如下:
import re # 一次性读取整个文件内容 with open('showrcopy.txt', 'r', encoding='utf-8') as f: content = f.read() # 需求1:提取Target Information到Group Information前一行的内容 target_info_pattern = r'Target Information\n(.*?)(?=\nGroup Information)' target_info = re.search(target_info_pattern, content, re.DOTALL).group(1).strip() # 需求2:提取Group Information到文件末尾的内容 group_info_pattern = r'Group Information\n(.*)' group_info = re.search(group_info_pattern, content, re.DOTALL).group(1).strip() # 需求3:分别提取两个区间内Name开头行的下一行内容 def get_name_next_lines(text): # MULTILINE模式让^匹配每行开头,直接捕获Name行的下一行 pattern = r'^Name.*\n(.*)' return [line.strip() for line in re.findall(pattern, text, re.MULTILINE)] # 输出结果 target_name_next = get_name_next_lines(target_info) group_name_next = get_name_next_lines(group_info) print("Target区间Name对应下一行内容:", target_name_next) print("Group区间Name对应下一行内容:", group_name_next)
正则逻辑说明
re.DOTALL参数让.可以匹配换行符,实现跨行区间匹配- 正向预查
(?=\nGroup Information)匹配到Group Information前的位置,不会把分界行本身包含进结果 re.MULTILINE参数让^匹配每一行的开头,精准识别以Name开头的行
行遍历方案修正
如果要沿用原有行遍历的实现思路,可以不用生成器,直接用标志位实现:
name_next_lines = [] is_after_name = False for line in required_lines: if is_after_name: name_next_lines.append(line) is_after_name = False if line.startswith('Name'): is_after_name = True print(name_next_lines)
内容的提问来源于stack exchange,提问作者redpy
相关产品推荐
相关产品推荐

