Skip to main content
 首页 » 编程设计

python之匹配子串和字符串的列表,匹配则返回子串

2025年05月04日40lyj

我看过很多关于这个主题的问题,但大多数与我的相反。我有一个字符串列表(数据框的列)和一个子字符串列表。我想将每个字符串与子字符串列表进行比较,如果它包含一个子字符串,则返回该子字符串,否则打印“不匹配”。

    subs = [cat, dog, mouse] 
 
    df 
 
      Name       Number     SubMatch 
     dogfood      1           dog 
     catfood      3           cat 
     dogfood      2           dog 
     mousehouse   1           mouse 
     birdseed     1           no match 

虽然我当前的输出看起来像这样:

     Name       Number     SubMatch 
     dogfood      1           dog 
     catfood      3           dog 
     dogfood      2           dog 
     mousehouse   1           dog 
     birdseed     1           dog 

我怀疑我的代码只是返回系列中的第一件事,如何将其更改为系列中的正确内容?这是函数:

    def matchy(col, subs): 
        for name in col: 
            for s in subs: 
                if any(s in name for s in subs): 
                    return s 
                else: 
                    return 'No Match' 

请您参考如下方法:

解决这个问题的 pandaic 方法是根本不使用循环。您可以使用 str.extract 非常简单地完成此操作:

p = '({})'.format('|'.join(subs)) 
df['SubMatch'] = df.Name.str.extract(p, expand=False).fillna('no match') 
 
df 
 
         Name  Number  SubMatch 
0     dogfood       1       dog 
1     catfood       3       cat 
2     dogfood       2       dog 
3  mousehouse       1     mouse 
4    birdseed       1  no match