我尝试使用分隔符在多行文本中找到多个匹配项,以便在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.
答案 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}}等号上进行拆分,这样您就可以交出适当大小的块进行评估。