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)有两个核心问题:- 默认情况下
.*不匹配换行符,只能拿到队列所在的单行 (?!\n\n)是负前瞻,仅检查当前位置后不是空行,无法控制匹配的终止边界,自然拿不到后续的成员行
- 默认情况下
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

