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

Python正则提取队列及成员信息失败,求解决方案

解决方向与实现方案
  • 修正正则匹配逻辑
    你之前的正则只匹配了单行队列信息,没处理跨行的成员内容。正确的思路是匹配以字母数字开头的队列行,然后包含后续所有非空行,直到遇到空行、下一个队列开头或者文本结尾。可以用这个正则:

    ^([\w\d].*?)(?=\n\n|^[\w\d]|$)
    

    各部分作用:

    • ^[\w\d]:匹配队列行的开头(字母/数字起始)
    • .*?:非贪婪匹配所有内容(跨行),避免过度匹配到下一个队列
    • (?=\n\n|^[\w\d]|$):正向断言,当遇到空行、下一个队列开头或文本结束时停止匹配
  • Python 3.9 代码实现
    结合re.MULTILINE(让^匹配每行开头)和re.DOTALL(让.匹配换行符)两个标志,就能完整提取每个队列块:

    import re
    
    # 替换成你的目标文本
    target_text = """
    queue1: main service
    member1@domain.com
    member2@domain.com
    
    queue2: secondary service
    member3@domain.com
    """
    
    pattern = r'^([\w\d].*?)(?=\n\n|^[\w\d]|$)'
    queue_blocks = re.findall(pattern, target_text, re.MULTILINE | re.DOTALL)
    
    # 遍历提取结果,拆分队列名和成员
    for block in queue_blocks:
        block = block.strip()
        queue_line, *members = block.split('\n')
        print(f"队列:{queue_line.strip()}")
        print(f"成员:{[m.strip() for m in members]}")
        print("---")
    
  • 原正则问题分析
    你之前的^[\w\d]+.*(?!\n\n)有两个核心问题:

    1. 默认情况下.*不匹配换行符,只能拿到队列所在的单行
    2. (?!\n\n)是负前瞻,仅检查当前位置后不是空行,无法控制匹配的终止边界,自然拿不到后续的成员行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:42:10