我有以下示例文本:
Active Stages - U: 1-18, L: 1-23
Passive Stages - U: 19-23
Attachments provided for stages - U: 1, 14; L: 1
字符串
我想从以特定文本开头的行中提取U: 1-18
和L: 1-23
。请注意,每行至少包含一个U
或L
组。
对于以Passive Stages
开头的一行,我尝试使用如下命名组的正则表达式:
re.findall('\nPassive Stages.*?U: (?P<upper>\d+(?:-\d+)*?)|L: (?P<lower>\d+(?:-\d+)*?)\n')
型
但是,它没有捕获带有Passive Stages
字符串的行。
请告诉我如何为这种情况编写正则表达式。
1条答案
按热度按时间s5a0g9ez1#
你可以找到一个以你想要的文本开头的行,然后找到
L
或U
的所有匹配项,后跟一个冒号,空格,然后是一个数字或一个数字范围。下面是sample Python demo:
字符串
在这里,
line.startswith("Passive Stages")
检查行是否以所需的子字符串开头\b([UL]):\s*(\d+(?:-\d+)*)
正则表达式匹配\b
-字边界([UL])
-第1组:U
或L
:\s*
-一个冒号,然后是零个或多个空格(\d+(?:-\d+)*)
-组2:一个或多个数字,然后-
和一个或多个数字的零个或多个重复dict(rx.findall(line))
-收集匹配项并使用找到的值创建一个字典。