我有一个脚本,该脚本可搜索配置文件并从另一个列表中查找字符串的所有匹配项,如下所示:

dstn_dir = "C:/xxxxxx/foobar"
dst_list =[]
files = [fn for fn in os.listdir(dstn_dir)if fn.endswith('txt')]
dst_list = []
for file in files:
    parse = CiscoConfParse(dstn_dir+'/'+file)
    for sfarm in search_str:
        int_objs = parse.find_all_children(sfarm)
        if len(int_objs) > 0:
            dst_list.append(["\n","#" *40,file + " " + sfarm,"#" *40])
            dst_list.append(int_objs)


我需要更改代码的这一部分:

 for sfarm in search_str:
            int_objs = parse.find_all_children(sfarm)


search_str是一个包含类似于['xrout:55','old:23']以及许多其他字符串的列表。

因此,它只会在sfarm中从我要遍历的列表中找到以字符串结尾的条目。我的理解是,这将需要我使用re并匹配sfarm$之类的东西,但是我不确定如何将其作为循环的一部分。

我正确地说sfarm是可迭代的吗?如果是这样,我需要知道如何在这种情况下对可迭代对象进行正则表达式。

最佳答案

python中的字符串是可迭代的,因此sfarm是可迭代的,但在这种情况下意义不大。通过阅读CiscoConfParse.find_all_children()的作用,很明显您的sfarmlinespec,它是一个正则表达式字符串。您无需在此处显式使用re模块;只需传递与sfarm串联的'$'

search_string = ['xrout:55','old:23']
...
for sfarm in search_str:
    int_objs = parse.find_all_children(sfarm + '$')  # one of many ways to concat
...

关于python - 正则表达式在for循环中的列表元素上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39161495/

10-12 19:12