如何解决Python - 基于 2 个关键字用长字符串拆分列表
我有一个包含长字符串的列表。如何拆分字符串以将部分从“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]
解决方法
您可以使用正则表达式,在惰性模式下匹配从 MyKeyword
到 MyData
的所有文本:
>>> 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>
被称为正向前瞻,意思是“跟随resources/views/vendor/nova
”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。