匹配字符串列表中的模式并返回索引列表

时间:2015-11-27 23:22:59

标签: python regex list filter

我想在python中执行以下操作:

Input list: ['abc', 'def', 'abx', 'cfd', 'nab', 'fdd', 'aadsd_ab']
Input pattern: 'ab'
Output: Return [0,2,4,6], i.e a list of indexes for every entry in input list that contains input pattern. 

在这种情况下,' abc' abx',' nab',' aadsd_ab'包含模式' ab'所以返回各自的索引[0,2,4,6] 在python中执行此操作的最简单方法是什么?

3 个答案:

答案 0 :(得分:2)

你可以像这样使用列表理解:

>>> words = ['abc', 'def', 'abx', 'cfd', 'nab', 'fdd', 'aadsd_ab']
>>> [idx for idx, word in enumerate(words) if 'ab' in word]
[0, 2, 4, 6]

答案 1 :(得分:1)

您也可以使用枚举,但列表理解也很棒。

l = ['abc', 'def', 'abx', 'cfd', 'nab', 'fdd', 'aadsd_ab']
l_idx = []
for idx, value in enumerate(l):
    if 'ab' in value:
        l_idx.append(idx)
print l_idx

l_idx包含您要查找的值。祝你好运!

答案 2 :(得分:0)

如果想使用regex只是为了更好地控制搜索

>>>l = ['abc', 'def', 'abx', 'cfd', 'nab', 'fdd', 'aadsd_ab']
>>>lst = []
>>>for i in l:
    if re.search(".*ab.*", i, re.IGNORECASE):
        lst.append(l.index(i))
>>>lst
>>>[0, 2, 4, 6]

说明: 对于列表l中的每个元素,如果匹配则匹配模式.*ab.*,然后获取该元素的索引并将其附加到第二个列表,即lst。 正则表达式模式意味着找到之前和之后都有任何字符的所有ab