Python - 打印子字符串直到所有匹配项都匹配为止

Python - Print substrings until matches for all matches

我正在寻找 string 中的所有匹配项并打印所有子字符串,直到我将这些 strings 匹配到新行。

例如

"123ABC97edfABCaaabbdd1234ABC0009ui50ABC_1234"

应该print:

ABC97edf
ABCaaabbdd1234
ABC0009ui50
ABC_1234

其中 "ABC" 是重复出现的 pattern 匹配项。

有没有一种使用 findall 的有效方法?

只编辑一个 F.Y.I: 我想做的基本上是我有一个 250+Gb 的文件,它有控制字符显示行的开始和结束,但是这些 Ctrl 字符(因为问题..主要是网络)嵌入在这些行中,即在 [=42 之间=]表示控制字符。

因此,start/end 控制字符与这些消息之间的控制字符之间没有具体区别。

所以我基本上删除了这些控制字符,并且我希望每行都有一条与某些特定正则表达式有关的完整消息。

此处的正则表达式不一定是 ABC 或所有这些消息的顺序。 我已经尝试使用 findall 并且能够找到所有匹配项,只是在找到下一个匹配项之前我不知道如何获取这些字符串之后的字符串。 (这里的正则表达式可以是 -ABC=35nga|DEF=64325:dfaf:1234| 或 **ABC=35632|DEF=61 和许多不同的形式。

而且我必须为每一行和在一行中嵌入多行的行打断。

使用re.findall:

查看 regex101 上的 regex

s = "123ABC97edfABCaaabbdd1234ABC0009ui50ABC_1234"
re.findall("ABC.*?(?=ABC|$)",s)

这给出了 list:

['ABC97edf', 'ABCaaabbdd1234', 'ABC0009ui50', 'ABC_1234']

如果你想 print 这个 list 中的 elements,你可以简单地做:

for sub in re.findall("ABC.*?(?=ABC|$)",s):
    print(sub)

这会 output:

ABC97edf
ABCaaabbdd1234
ABC0009ui50
ABC_1234