如何编写正则表达式从指定开头行提取U/L组数值数据
适配Passive Stages行的正则表达式方案
问题分析
你原正则的核心问题有两个:一是用\n锚定行首尾,会漏掉首行或末行的匹配;二是分支结构没限定在Passive Stages行范围内,可能误匹配其他行的L组。
修正后的正则(带命名组)
针对以Passive Stages开头的行,精准捕获U/L组的正则如下:
import re text = """Active Stages - U: 1-18, L: 1-23 Passive Stages - U: 19-23 Attachments provided for stages - U: 1, 14; L: 1""" # 匹配Passive Stages开头的行,捕获U/L对应的数值组 pattern = r'^Passive Stages.*?(?:U: (?P<upper>\d+(?:-\d+)*)|L: (?P<lower>\d+(?:-\d+)*))' matches = re.findall(pattern, text, re.MULTILINE) print(matches) # 输出: [('19-23', '')]
正则规则说明
^Passive Stages:配合re.MULTILINE模式,用^锚定每行开头,确保只匹配目标行.*?:非贪婪匹配,跳过行首到U/L组之间的无关内容(?:U: ...|L: ...):非捕获组包裹两个分支,分别匹配U和L的数值段(?P<upper>\d+(?:-\d+)*):命名组upper捕获U后的内容,支持单个数字(如19)或数字范围(如1-18)(?P<lower>\d+(?:-\d+)*):命名组lower捕获L后的内容,规则和upper一致
扩展:匹配所有含U/L组的行
如果需要同时处理Active Stages、Attachments provided for stages等所有目标行,可使用通用正则:
pattern = r'^.*?(?:U: (?P<upper>\d+(?:-\d+)*)|L: (?P<lower>\d+(?:-\d+)*))' matches = re.findall(pattern, text, re.MULTILINE)
内容的提问来源于stack exchange,提问作者user23194468
相关产品推荐
相关产品推荐

