在具有2个列表的字符串列表中搜索子字符串匹配

时间:2018-05-25 16:41:23

标签: python regex list substring

我有两个我正在尝试使用的列表。第一个是nameList,它对应于我想在其中找到匹配项的名称,第二个列表是该命名列表的状态。我希望能够查看第一个列表并查找字符串中的匹配项,如果有匹配项,请将第一个列表中的元素抓取到新列表中,并获取第二个列表中的相应元素以获取名称和状态对。我已经尝试了几种方法,并且无法正确完成并查看了电路板上的各种列表理解问题,但未能找到适合我案例的解决方案。

例如,在下面的代码中,我想抓住'abc-1'和'abc-2'条目以及这两个条目的'ok'和'ok'状态,并将其输出为finalNameList和finalStatusList。

我很感激任何人都可以提供帮助。

在我目前的实施中,我得到了一个 类型错误:'期望字符串或缓冲区'

import re
import os
import sys
import getopt
import pdb

nameList = ['abc-1', 'abc-2', 'def-1', 'def-2']
statusList = ['ok', 'ok', 'bad', 'bad']
scac = 'abc'


def scacFilter (scac, nameList, statusList):
    if not scac:
        newNameList = nameList
        newStatusList = statusList
    else:
        for i in nameList:
            if re.search(scac, i):
                name = nameList[i]
                status = statusList[i]
                newNameList.append(name)
                newStatusList.append(status)
            else:
                print 'no scac match'
    return newNameList, newStatusList


finalNameList, finalStatusList = scacFilter(scac, nameList, statusList)

2 个答案:

答案 0 :(得分:0)

i是一个整数。因此正则表达式在整数值中搜索scac中定义的字符串。即它正在'abc'中搜索1

创建for循环的更好方法是:

for i in nameList:

这样,i实际上是nameList中的字符串(即'abc-1''abc-2'等等)而不是整数,因此您可以使用static void Main(string[] args) { MainAsync().Wait(); } static async Task MainAsync() { var httpClient = new HttpClient(); var response = await httpClient.GetAsync("https://www.staples.com"); } 。我将对你想要的字符串执行你的正则表达式!

答案 1 :(得分:0)

import os

nameList = ['abc-1', 'abc-2', 'def-1', 'def-2']
statusList = ['ok', 'ok', 'bad', 'bad']
scac = 'abc'


def scacFilter (scac, nameList, statusList):
    resultList = []
    resultVal = []
    for val in nameList:
        if not val.find(scac):
            indexVal = nameList.index(val)
            resultList.append(nameList[indexVal])
            resultVal.append(statusList[indexVal])
    return resultList, resultVal
finalNameList, finalStatusList = scacFilter(scac, nameList, statusList)
print finalNameList
print finalStatusList