在包含相同前缀和后缀的字符串列表中获取特定的字符串

时间:2019-07-17 14:31:11

标签: python

我有一个字符串列表,所有字符串都以相同的前缀开头,然后是一个唯一的数字然后是一个后缀。我想要不包含任何后缀的字符串。

我尝试过按字符串长度过滤,但是很麻烦。另外,我不能包含“并且在x中不包含_direct”,因为每次运行该程序时后缀都会不同。它不一定总是“ _direct”

list = ['__light_grp1, __light_grp1_direct, __light_grp2, __light_grp2_direct]

for x in list:
    if "__light_grp" in x:
        print x

我期望的是

“ __ light_grp1,__ light_grp2”

我得到的是什么

“ __ light_grp1,__light_grp1_direct,__light_grp2,__light_grp2_direct”

3 个答案:

答案 0 :(得分:0)

尝试一下:

import re
dirs = ['__light_grp1', '__light_grp1_direct', '__light_grp2', '__light_grp2_direct']
for name in dirs:
    m = re.search(r'\d+$', name)
    if not m :
        dirs.remove(name)
print(dirs)

输出:

['__light_grp1', '__light_grp2']

答案 1 :(得分:0)

我会选择类似的东西:

true_list = []
for x, y in a_list: # x, y could by any truthy or falsy value
  true_list.append(x or y)
  true_list.append(x if x else y)

基本上我们在这里要做的是检查列表中的每个项目的最后一个元素是否为数字

答案 2 :(得分:0)

由于前缀将始终相同,因此可以利用它来发挥自己的优势。基本上,您知道带有前缀的单词将始终以一个额外的下划线开头。

因此您可以这样做:

prefix = "__light_grp"
ref = len(prefix.split("_"))
for x in lst:
    if (len(x.split("_"))) == ref:
        print(x)