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

How do I excecute a command for every split?

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

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

以此类推100个三个单词集

我想从每个标记为“{}”的集合中提取第二个单词,所以在这个例子中我想要输出:

"Plant,Animal,Plant"

以此类推

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

截至目前,我正在为每个“{ }”组单独使用 string.split(",")[1]

谢谢。

这样就可以了:

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] 对原始字符串进行切片不是强制性的(没有它也可以工作),但是如果您只想要第一个而不是第二个项目,那将会有所不同.如果你想要第 3 个也是如此。


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

out = ','.join(res)

然后给你

"Plant,Animal,Plant"

试试这个:

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

另一个解决方案是使用正则表达式,有点复杂,但这是一个值得讨论的技术:

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 中正则表达式的 link 和一个 online regex editor

#!/bin/python3

string = "{Red,Plant,Eel}{Blue,Animal,Maple}{Yellow,Plant,Crab}"
a = string.replace('{','').replace('}',',').split(',')[1::3]
print(a)

结果是 ['Plant', 'Animal', 'Plant']