python 从以特定文本开头的行提取数字数据

gt0wga4j  于 2024-01-05  发布在  Python
关注(0)|答案(1)|浏览(109)

我有以下示例文本:

Active Stages - U: 1-18, L: 1-23
Passive Stages - U: 19-23
Attachments provided for stages - U: 1, 14; L: 1

字符串
我想从以特定文本开头的行中提取U: 1-18L: 1-23。请注意,每行至少包含一个UL组。
对于以Passive Stages开头的一行,我尝试使用如下命名组的正则表达式:

re.findall('\nPassive Stages.*?U: (?P<upper>\d+(?:-\d+)*?)|L: (?P<lower>\d+(?:-\d+)*?)\n')


但是,它没有捕获带有Passive Stages字符串的行。
请告诉我如何为这种情况编写正则表达式。

s5a0g9ez

s5a0g9ez1#

你可以找到一个以你想要的文本开头的行,然后找到LU的所有匹配项,后跟一个冒号,空格,然后是一个数字或一个数字范围。
下面是sample Python demo

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"""

rx = re.compile(r"\b([UL]):\s*(\d+(?:-\d+)*)")

for line in text.splitlines(False):
    if line.startswith("Passive Stages"):
        match = dict(rx.findall(line))
        print(match)

字符串
在这里,

  • line.startswith("Passive Stages")检查行是否以所需的子字符串开头
  • \b([UL]):\s*(\d+(?:-\d+)*)正则表达式匹配
  • \b-字边界
  • ([UL])-第1组:UL
  • :\s*-一个冒号,然后是零个或多个空格
  • (\d+(?:-\d+)*)-组2:一个或多个数字,然后-和一个或多个数字的零个或多个重复
  • dict(rx.findall(line))-收集匹配项并使用找到的值创建一个字典。

相关问题