2024-09-29 04:26:16 发布
网友
我是python新手,正在尝试过滤一个类似以下内容的字符串:
"{Red,Plant,Eel}{Blue,Animal,Maple}{Yellow,Plant,Crab}"
以此类推,一共有100个单词
我想从每个标有“{}”的集合中提取第二个单词,因此在本例中,我想要输出:
"Plant,Animal,Plant"
等等
我怎样才能有效地做到这一点
现在,我正在为每个“{}”组分别使用string.split(",")[1]
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]中,我们移除初始的"{"和尾部的"}",然后在"}{"的每个实例上分割剩余的实体,从而产生:
str_[1:-1]
"{"
"}"
"}{"
["Red,Plant,Eel", "Blue,Animal,Maple", ...]
最后,对于每个字符串,我们在","上拆分以获得
","
[["Red", "Plant", "Eel"], ...]
从中我们只保留每个子列表的第一个元素x[1]
x[1]
请注意,对于您的特定目的,使用str_[1:-1]对原始字符串进行切片并不是强制性的(没有它也可以工作),但是如果您只需要第一项而不需要第二项,则会有所不同。如果你想要第三个也一样
如果要将输出的字符串串联起来以匹配所需的结果,只需将结果列表传递给.join,如下所示:
.join
out = ','.join(res)
这就给了你
试试这个:
[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输出是:
result_list
这里是python中regex的link 和online regex editor
这样做的诀窍:
并产生
在
str_[1:-1]
中,我们移除初始的"{"
和尾部的"}"
,然后在"}{"
的每个实例上分割剩余的实体,从而产生:最后,对于每个字符串,我们在
","
上拆分以获得从中我们只保留每个子列表的第一个元素
x[1]
请注意,对于您的特定目的,使用
str_[1:-1]
对原始字符串进行切片并不是强制性的(没有它也可以工作),但是如果您只需要第一项而不需要第二项,则会有所不同。如果你想要第三个也一样如果要将输出的字符串串联起来以匹配所需的结果,只需将结果列表传递给
.join
,如下所示:这就给了你
试试这个:
另一种解决方案是使用regex,有点复杂,但这是一种值得讨论的技术:
那么
result_list
输出是:这里是python中regex的link 和online regex editor
相关问题 更多 >
编程相关推荐