使用RE捕获关键字内的文本

 收藏

我正在尝试捕获一个特殊关键字之间并由换行符分隔的多行。

text = """
KeyWord some text
Data: 012
***coconut***
list[123]
par(098)
Finish me


KeyWord random random text
Data: 1257
Cowboy
***mango***
list[121343]
par(afsd)
Catwoman
Tamarindo
Gotic
Gotham




KeyWord another text
Data: 532
***banana***
It can have more lines
And more
And more
list[dhf]
par(345)


"""

如您所见,每个“段落”都以“关键字”开头,并且行数不同。我想要的是抓住由n个空行分隔的每个段落,并将它们放入列表中,以便稍后可以在仅包含带有文本行(段落)的列表上进行遍历。最终列表的len应该为3。并且不能包含空行,只能包含字符行。

我尝试了以下操作,但均未成功:

pattern = re.compile(r'KeyWord .+KeyWord',re.DOTALL)

提前致谢

回复
  • Finn 回复

    I would use re.findall here:

    paragraphs = re.findall(r'\bKeyWord(.*?)(?=\bKeyWord\b|$)', text, flags=re.DOTALL)
    print(paragraphs)
    

    打印:

    [' some text\nData: 012\n***coconut***\nlist[123]\npar(098)\nFinish me\n\n\n',
     ' random random text\nData: 1257\nCowboy\n***mango***\nlist[121343]\npar(afsd)\nCatwoman\nTamarindo\nGotic\nGotham\n\n\n\n\n',
     ' another text\nData: 532\n***banana***\nIt can have more lines\nAnd more\nAnd more\nlist[dhf]\npar(345)\n\n']
    

    此处的正则表达式逻辑是捕获关键字之后直至下一个关键字或输入结尾出现但之后的内容。