【问题标题】:Partial match between two python lists, one list exactly present in the other with few additional characters in Python两个 python 列表之间的部分匹配,一个列表完全存在于另一个列表中,而 Python 中的附加字符很少
【发布时间】:2019-10-24 20:26:07
【问题描述】:

我有两个列表。

files = ['26ZJ35_v1.4.doc', '2EPWW9_v1.1.pdf', '344D4Q_v1.8.ppt'. '33ADNL_v3.0.pdf']

baseline_documents  = ['26ZJ35', '2EPWW9']

我想在 list1 中找到与列表 2 完全匹配的所有匹配项,并附加到一个新列表中。

所需的输出:

list3 = ['26ZJ35_v1.4.doc', '2EPWW9_v1.1.pdf']

到目前为止的代码:

import csv
import os
import re
metadata = []
with open('D:/meta_demo.csv', 'r') as f:
    rows = csv.reader(f)
    for i in rows:
        metadata.append(i)
        #print(i)    
baseline_documents = metadata[1:20]
DIR = 'D:/demo_files/'
files = [i for i in os.listdir(r"D:\demo_files")]

list3 = []
for i in files:
    if re.search(r"[^_]*", i) in baseline_documents:
        list3.append(files)

list3 = [i for i in baseline_documents if re.search(r"[^_]*", i) in files]

【问题讨论】:

    标签: python regex list loops string-matching


    【解决方案1】:

    您可以使用str.startswith

    例如:

    files = ['26ZJ35_v1.4.doc', '2EPWW9_v1.1.pdf', '344D4Q_v1.8.ppt', '33ADNL_v3.0.pdf']
    baseline_documents  = ['26ZJ35', '2EPWW9']
    result = [i for i in files if i.startswith(tuple(baseline_documents))]
    print(result)
    

    如果您需要正则表达式,请使用re.match

    例如:

    import re
    
    files = ['26ZJ35_v1.4.doc', '2EPWW9_v1.1.pdf', '344D4Q_v1.8.ppt', '33ADNL_v3.0.pdf']
    baseline_documents  = ['26ZJ35', '2EPWW9']
    pattern = re.compile("|".join(baseline_documents))
    
    result = [i for i in files if pattern.match(i)]
    print(result)
    

    输出:

    ['26ZJ35_v1.4.doc', '2EPWW9_v1.1.pdf']
    

    【讨论】:

    • 非常感谢。我也可以使用 re.search(r"[^_]*" 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多