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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:45:02