簡體   English   中英

Python 正則表達式:使用 re.findall 遍歷字符串列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM