Python - 根据 2 个关键字拆分带有长字符串的列表

Posted

技术标签:

【中文标题】Python - 根据 2 个关键字拆分带有长字符串的列表【英文标题】:Python - Split a list with a long string based on 2 keywords 【发布时间】:2021-01-27 11:37:18 【问题描述】:

我有一个列表,里面有一个长字符串。如何拆分字符串以将部分从“MyKeyword”提取到“My Data”。这些词在我的列表中出现多次,所以我想根据这个拆分它,如果可能的话,包括 MyKeyword 和 MyData

当前数据示例:

['MyKeyword This is my data MyData. MyKeyword and chunk of text here. Random text. MyData is this etc etc ']

期望的输出:

['MyKeyword This is my data', 'MyData.', 'MyKeyword and chunk of text here. Random text.','MyData is this etc etc ']

当前代码:


from itertools import groupby
#linelist = ["a", "b", "", "c", "d", "e", "", "a"]
split_at = "MyKeyword"
[list(g) for k, g in groupby(output2, lambda x: x != split_at) if k]

【问题讨论】:

【参考方案1】:

您可以使用正则表达式,在惰性模式下匹配从MyKeywordMyData 的所有文本:

>>> import re
>>> re.findall("MyKeyword.*?MyData\.?","MyKeyword This is my data, MyData. MyKeyword and chunk of text here. Random text. MyData is this etc etc ")
['MyKeyword This is my data, MyData.', 'MyKeyword and chunk of text here. Random text. MyData']
.*? 表示 0 到无限字符,但处于惰性模式 (*?),即尽可能少; \.? 表示可选的句点。

EDIT(根据新要求):

您需要的正则表达式类似于

MyKeyword.*?(?= ?MyData|$)|MyData.*?(?= ?MyKeyword|$)

它从匹配MyKeyword(对应MyData)的点开始,然后像上面一样捕获尽可能少的字符,直到达到MyData(对应MyKeyword)或字符串的结尾。

确实:

| 是一个特殊字符,意思是“或” $ 匹配字符串的结尾 ? 是可选空格 (?=<expr>) 被称为正向前瞻,意思是“跟随<expr>

【讨论】:

谢谢!有没有办法不包含第二个单词 (MyData) - 所以它只提取到 MyData 之前,然后再次运行 My Data to MyKeyword? @qwerty12 我不确定我是否理解了,请编辑您的问题以澄清您的预期输出或打开一个新问题。 抱歉,已经更新了所需的输出,所以它更有意义 尝试使用以下正则表达式:MyKeyword.*?(?= ?MyData|$)|MyData.*?(?= ?MyKeyword|$)。如果这是你想要的,我会用解释更新我的答案;-)

以上是关于Python - 根据 2 个关键字拆分带有长字符串的列表的主要内容,如果未能解决你的问题,请参考以下文章

javascript 拆分字符串N个字符长

如何在 JavaScript 中将长正则表达式拆分为多行?

XSLT - 根据长度很好地将长地址拆分为多个标签

在 SQL 中拆分长字符串

如何使用JavaScript将长数组拆分为更小的数组

根据长度和逗号拆分输入字符串(送货地址数据)