【问题标题】:Python - Search a list item that contains a string (match case)Python - 搜索包含字符串的列表项(匹配大小写)
【发布时间】:2015-10-02 06:41:51
【问题描述】:

我需要搜索列表中的任何项目是否包含特定字符串。目前我使用此代码:

mylist = ['Hometown City Heights', 'Height 6'', 'First name Mike']   
item = [s for s in mylist if "First name" in s]
print item[0]
>> First name Mike

问题是,如果我尝试搜索Height,我得到了这个:

mylist = ['Hometown City Heights', 'Height 6'', 'First name Mike']   
item = [s for s in mylist if "Height" in s]
print item[0]
>> Hometown City Heights

我只需要匹配包含在Height 6' 元素中的Height,这样item[0] 就是我需要的那个。最好的方法是什么?

【问题讨论】:

    标签: python regex list


    【解决方案1】:

    您可以拆分您的项目,然后检查:

    item = [s for s in mylist if "Height" in s.split()]
    

    演示:

    >>> mylist = ['Hometown City Heights', "Height 6'"]
    >>> [s for s in mylist if "Height" in s.split()]
    ["Height 6'"]
    >>> 
    

    作为一种更通用的方式,您可以使用正则表达式来搜索您的模式:

    import re
    [s for s in mylist if re.search(r'\b{}\b'.format(pattern),s)]
    

    演示:

    >>> pattern='First name'
    >>> [s for s in mylist if re.search(r'\b{}\b'.format(pattern),s)]
    ['First name Mike']
    

    【讨论】:

    • 哇,它有效,但我不明白为什么!如果我拆分Hometown City Heights 并在里面搜索Height,为什么它与Heights 元素不匹配?
    • @Hyperion 很高兴,因为HeightHometown City Heights' 内部,但不在['Hometown', 'City', 'Heights'] 内部
    • 好的,谢谢,但我有一个小问题。不幸的是,此解决方案并非在所有情况下都有效,因为我也有类似 First name Mike 的字段,我需要搜索整个 First name 字符串,如果我之前使用 split 将无法使用
    • @Hyperion 是的,在这种情况下我不会工作,请将您的示例添加到问题中,我会更新答案。
    猜你喜欢
    • 2013-10-19
    • 2010-11-08
    • 1970-01-01
    • 2014-10-12
    • 2012-04-28
    • 2020-06-23
    • 2011-09-10
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多