如何在 Python 中使用子字符串拆分字符串,但包含原始子字符串?

How can I split a string in Python using a substring, but include the original substring?

提问人:Judy Gong 提问时间:10/6/2023 最后编辑:Judy Gong 更新时间:10/6/2023 访问量:49

问:

例如:

输入字符串:

"Potato1 Potato2,,...Potato3|Potato4"

期望输出:

["Potato1 ", "Potato2,,...", "Potato3|", "Potato4"]

我尝试使用 str.split 和 re.split,但它们要么完全删除“Potato”这个词,要么将“Potato”添加为列表中的单独值。

Python 字符串 拆分

评论

1赞 Tim Roberts 10/6/2023
没有参数的简单将做到这一点。字符串将在空格上拆分。str.split()
0赞 Barmar 10/6/2023
@TimRoberts 它不会在结果中保留空格。
0赞 jkr 10/6/2023
如果需要空格,则可以在结果列表中所有项目(最后一项除外)的末尾添加一个空格。str.split()
0赞 Tim Roberts 10/6/2023
嗯。我称之为非常不寻常的需求。解决这个问题很容易,因为你知道除了最后一个元素之外,每个元素都有一个空格。
1赞 Judy Gong 10/6/2023
我的坏,我的例子不是很好。如果我们假设空白并不总是存在呢?我们想提取所有包含 Potato 的值,直到我们到达下一个 Potato 或字符串末尾。

答:

1赞 Barmar 10/6/2023 #1

请勿将 ,与以空格结尾的字符串匹配的模式一起使用。split()re.findall()

string = "Potato1 Potato2,,... Potato3| Potato4"
result = re.findall(r'\S+\s*', string)
2赞 Andrej Kesely 10/6/2023 #2

基于注释“我们希望提取所有包含 Potato 的值,直到我们到达下一个 Potato 或字符串末尾。 您可以使用模块(regex101 demo):re

import re

txt = "Potato1 Potato2,,... Potato3| Potato4"

print(re.findall(r"Potato.*?(?=Potato|$)", txt))

指纹:

['Potato1 ', 'Potato2,,... ', 'Potato3| ', 'Potato4']
0赞 Adrian8115 10/6/2023 #3

您可以使用正则表达式来拆分输入字符串,从而获得所需的输出。下面是一个 Python 代码片段来执行此操作:

import re

input_string = "Potato1 Potato2,,...Potato3|Potato4"
output_list = re.split(r'(?<=Potato\d)(?=\s|,|\||$)', input_string)

print(output_list)

此代码使用正向后视 (?<=Potato\d) 和正向前视 (?=\s|,|||$) 在“Potato”后面跟空格、逗号、竖线或字符串末尾的位置拆分字符串。这样,“土豆”将保持附加到后续字符,如所需的输出所示。

运行代码时,它将生成以下输出:

['Potato1 ', 'Potato2,,...', 'Potato3|', 'Potato4']

这会将输入字符串拆分为所需的子字符串列表。