如何为每个拆分执行命令?
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']
我是 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']