python 多行正则表达式 findall

python multiline regex findall

我正在尝试使用定界符在多行文本中找到多个匹配项,以停止在 python 中使用正则表达式进行搜索...如果什么情况下,我的查询很适合我要完成的任务我需要的都在同一行: re.findall('([a-zA-Z]{3}\d-[aAeE][rRsS]\d.*), 输出)

问题是,有时我尝试捕获的额外数据不适合放在同一行并转到下一行...有没有办法将模式匹配设置为在找到时停止下一场比赛还是命中定界符(在这种情况下为=)?下面是两个匹配项的简化示例,我需要能够捕获两者...

示例

Port Id Description
3/2/4 Part of aggregate interface lag-4. Next device in path sea1-as2
lag-4, sea1-as2 3/1/2.

似乎您所要做的就是添加 [\s\S]*? 以捕获下一行中出现的任何内容,并包括预期的停止 , | . 以停止匹配。请注意,使 [\s\S]*? 变得惰性很重要,否则,它将匹配整个事情。

print(re.findall(r'([a-zA-Z]{3}\d-[aAeE][rRsS]\d[\s\S]*?\d)(?:,|\.)', output))

输出

['sea1-as2 lag-4', 'sea1-as2 3/1/2']

您提到了 [a-zA-Z][aAeE][rRsS]。有几种设置方法 re.IGNORECASE 这样 [ae][rs] 就足够了。

您没有说清楚您是在使用 re.MULTILINE 还是在评估正则表达式之前要删除换行符。你以 .* 结尾,这很容易变成

[^=]*

如果您想要 = 分隔符之前的所有内容。

或者,在评估正则表达式之前,您可以在 \n 换行符和 = 相等处拆分,这样您就可以提交适当大小的块进行评估。