使用 Regex 查找所有出现的特定字符串并将其与随后出现的另一个字符串配对

Use Regex to find all occurrences of a specific string and pair it with subsequent occurrences of another string

现在我有一个正在读入的 test.txt 文件。它有几个换行符,所以我正在使用 re.DOTALL。如何将后续模式组合成对?

test.txt:

      blah blah blah||| blah blah|| 
                Key_one1_end  ||   blah blah
                blah blah || blah
blah blah |||||| blah blah Value_number : 10
      blah blah blah||| blah blah|| 
                Key_two2_end  ||   blah blah
                blah blah || blah
                      Value_number : f

这是我的代码

f = open(r'path/to/file/test.txt')
list= re.findall('(Key_\w*_end)|(Value_number...\w*)', f.read(), re.DOTALL)
print (list)
output: [('Key_one1_end', ''), ('', 'Value_number : 10'), ('Key_two2_end', ''), ('', 'Value_number : f')]

我希望输出看起来像这样 [('Key_one1_end','Value_number : 10'), ('Key_two2_end', 'Value_number : f')]

有什么建议吗?

pattern1|pattern2 匹配任一模式,因此列表中的每个匹配项将仅包含其中一个匹配项。

如果您想将它们组合成一个匹配项,请不要使用替代项。使用通配符来匹配两个模式之间的文本。

list= re.findall('(Key_\w*_end).*?(Value_number...\w*)', f.read(), re.DOTALL)