如何在Python的字符串列表中检查子字符串是否匹配

时间:2016-03-31 12:41:54

标签: python

我有一个列表,我想查找字符串是否存在于字符串列表中。

li = ['Convenience','Telecom Pharmacy']
txt = '1 convenience store'

我想将txt与列表中的Convenience进行匹配。

我试过了

if any(txt.lower() in s.lower() for s in li):
   print s

print [s for s in li if txt in s]

这两种方法都没有给出输出。

如何将子字符串与列表匹配?

4 个答案:

答案 0 :(得分:3)

您可以使用set()intersection

In [19]: set.intersection(set(txt.lower().split()), set(s.lower() for s in list1))
Out[19]: {'convenience'}

答案 1 :(得分:0)

你可以试试这个,

>> list1 = ['Convenience','Telecom Pharmacy']

>> txt = '1 convenience store'

>> filter(lambda x: txt.lower().find(x.lower()) >= 0, list1)
['Convenience']

# Or you can use this as well

>> filter(lambda x: x.lower() in txt.lower(), list1)
['Convenience']

答案 2 :(得分:0)

我看到两件事。

是否要查找模式字符串是否与列表中的项完全匹配?在这种情况下,没有什么比这更简单了:

if txt in list1:
    #do something

如果您希望列表不区分大小写,也可以执行txt.upper()或.lower() 但是如果你想按照我的理解,要查找是否有一个字符串(在列表中)是txt的一部分,你必须使用“for”循环:

def find(list1, txt):
#return item if found, false otherwise
for i in list1:
    if i.upper() in txt.upper(): return i

return False

它应该有用。

控制台输出:

>>>print(find(['Convenience','Telecom Pharmacy'], '1 convenience store'))
Convenience
>>>

答案 3 :(得分:0)

我认为分裂是你的答案。以下是python文档中的描述:

  

string.split(s [,sep [,maxsplit]])

     

返回字符串s的单词列表。如果可选的第二个参数sep不存在或为None,则这些单词将被任意分隔   空格字符串(空格,制表符,换行符,返回,   换页)。如果第二个参数sep存在而不是None,那么   指定要用作单词分隔符的字符串。返回的列表   然后将有一个项目超过非重叠的数量   字符串中出现分隔符。如果给出maxsplit,at   发生大多数maxsplit分裂数,以及字符串的其余部分   作为列表的最后一个元素返回(因此,列表将具有   最多maxsplit + 1个元素)。如果未指定maxsplit或-1,则   分裂数量没有限制(所有可能的分裂都是   制造)。

     

拆分空字符串的行为取决于sep的值。如果未指定sep或指定为None,则结果为   一个空列表。如果将sep指定为任何字符串,则结果为a   包含一个空字符串元素的列表。

在txt变量上使用split命令。它会给你一个清单。然后,您可以在两个列表上进行比较以查找任何匹配项。我个人会编写嵌套的for循环来手动检查列表,但是python为这个工作提供了很多工具。以下链接讨论了匹配两个列表的不同方法。

How can I compare two lists in python and return matches

享受。 : - )