[英]Python regex: Iterate over a list of strings using re.findall
我有一個列表,它只是一個文件名列表。
['20190918_TrialBalance_TPBL.txt','20190918_ManagerBalance_TPCL.txt','20190918_ManagerBalance_TPCH.txt']
客觀的:
我想知道該列表是否包含任何名稱包含“TrialBalance”的文件。
我的方法:
我正在嘗試使用regex
遍歷該列表。
import re
files=[]
for f in list_files:
tbl = re.findall(r'trial.*\.txt$',f, re.IGNORECASE)
files.append(tbl)
上面的代碼沒有產生任何結果,即我得到一個空白列表。
但是,當我將re.findall
應用於單個項目時,即re.findall(r'trial.*\.txt$',list_files[0], re.IGNORECASE)
我得到了正確的答案。
任何人都可以幫我指出缺失的行嗎?
這更簡單:
files=[]
for f in list_files:
if 'TrialBalance' in f:
files.append(f)
對於您的情況,使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.