我如何为每个拆分执行命令?

2024-09-29 04:26:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,正在尝试过滤一个类似以下内容的字符串:

"{Red,Plant,Eel}{Blue,Animal,Maple}{Yellow,Plant,Crab}"

以此类推,一共有100个单词

我想从每个标有“{}”的集合中提取第二个单词,因此在本例中,我想要输出:

"Plant,Animal,Plant"

等等

我怎样才能有效地做到这一点

现在,我正在为每个“{}”组分别使用string.split(",")[1]

谢谢


Tags: 字符串stringbluered单词splitmapleplant
3条回答

这样做的诀窍:

str_ = "{Red,Plant,Eel}{Blue,Animal,Maple}{Yellow,Plant,Crab}"
res = [x.split(',')[1] for x in str_[1:-1].split('}{')]

并产生

['Plant', 'Animal', 'Plant']

str_[1:-1]中,我们移除初始的"{"和尾部的"}",然后在"}{"的每个实例上分割剩余的实体,从而产生:

["Red,Plant,Eel", "Blue,Animal,Maple", ...]

最后,对于每个字符串,我们在","上拆分以获得

[["Red", "Plant", "Eel"], ...]

从中我们只保留每个子列表的第一个元素x[1]

请注意,对于您的特定目的,使用str_[1:-1]对原始字符串进行切片并不是强制性的(没有它也可以工作),但是如果您只需要第一项而不需要第二项,则会有所不同。如果你想要第三个也一样


如果要将输出的字符串串联起来以匹配所需的结果,只需将结果列表传递给.join,如下所示:

out = ','.join(res)

这就给了你

"Plant,Animal,Plant"

试试这个:

[i.split(',')[1] for i in str_[1:].split('}')[:len(str_.split('}'))-1]]

另一种解决方案是使用regex,有点复杂,但这是一种值得讨论的技术:

import re
input_string = "{Red,Plant,Eel}{Blue,Animal,Maple}{Yellow,Plant,Crab}"
regex_string = "\{\w+\,(\w+)\,\w+\}"

result_list = re.findall(regex, input_string)

那么result_list输出是:

['Plant', 'Animal', 'Plant']

这里是python中regex的linkonline regex editor

相关问题 更多 >