python multiline regex findall

时间:2017-10-15 02:33:54

标签: python regex delimiter

我尝试使用分隔符在多行文本中找到多个匹配项,以便在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.

2 个答案:

答案 0 :(得分:0)

似乎您只需要添加[\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']

答案 1 :(得分:0)

您提到了[ae][rs]re.MULTILINE。有几种方法可以设置 re.IGNORECASE以便.*就足够了。

如果您正在使用[^=]* ,或者在评估正则表达式之前删除换行符,则表明您没有说清楚。你以=结束,这可能很容易成为

\n

如果您希望所有内容都达到=分隔符。

或者,在评估正则表达式之前,您可以在{{1}}换行符和{{1}}等号上进行拆分,这样您就可以交出适当大小的块进行评估。