Python regex:使用re.findall遍历字符串列表

时间:2019-09-22 14:39:01

标签: python regex

我有一个列表,不过是文件名列表。

from traits.api import (HasTraits, Trait)

class bar(HasTraits):
    zap = Trait("None", {"None": None})

    def __init__(self):
        # In reality, determined programmatically at runtime.
        add_dict_entries = {"One": 1}
        new_dict = {"None": None}
        new_dict.update(add_dict_entries)
        # self.zap = Trait("None", new_dict)
        # self.zap.update(new_dict)
        # self.trait_setq(zap=Trait("None", new_dict))
        self.remove_trait("zap")
        self.add_trait("zap", Trait("None", new_dict))

theBar = bar()

目标:

我想知道列表中是否包含名称为'TrialBalance'的文件。

我的方法:

我正在尝试使用['20190918_TrialBalance_TPBL.txt','20190918_ManagerBalance_TPCL.txt','20190918_ManagerBalance_TPCH.txt'] 遍历该列表。

regex

以上代码未产生任何结果,即我得到了一个空白列表。

但是,当我将import re files=[] for f in list_files: tbl = re.findall(r'trial.*\.txt$',f, re.IGNORECASE) files.append(tbl) 应用于单个项目,即re.findall时,我会得到正确的答案。

有人可以帮助我指出缺失的地方吗?

2 个答案:

答案 0 :(得分:1)

这更简单:

files=[]
for f in list_files:
    if  'TrialBalance' in f:
        files.append(f)

答案 1 :(得分:0)

对于您的情况,使用re.findall低效的,请使用以下方法以及准备好的正则表达式模式和re.search功能:

import re

list_files = ['20190918_TrialBalance_TPBL.txt', '20190918_ManagerBalance_TPCL.txt', '20190918_ManagerBalance_TPCH.txt']
pat = re.compile(r'trial.*\.txt$', re.I)
trial_files = [f for f in list_files if pat.search(f)]

print(trial_files)  # ['20190918_TrialBalance_TPBL.txt']

非正则表达式方法也可行:

list_files = ['20190918_TrialBalance_TPBL.txt', '20190918_ManagerBalance_TPCL.txt', '20190918_ManagerBalance_TPCH.txt']
trial_files = []
for f in list_files:
    f_ = f.lower()
    if 'trial' in f_ and f_.endswith('.txt'):
        trial_files.append(f)

print(trial_files)