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

如何编写正则表达式从指定开头行提取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:56:01