如果列表项是字符串,则对该特定项执行某些操作并忽略其余字符串

时间:2014-04-29 23:37:23

标签: python string list python-2.7

我有一个项目列表,我在一个大字符串中搜索这些项目中的任何一个。我怎样才能只调用找到的项目?

现在,我可以搜索列表项,但是我将返回整个字符串,而不仅仅是我要搜索的列表项。例如:

my_list = ['foobar', 'lorem ipsum', 'hello world!']
my_string = 'lorem ipsum dolor sit amet, consectetur adipiscing elit.'

if any(list_item in my_string for list_item in my_list):
 print my_string

这会按预期返回整个字符串,但是如何只获取我正在搜索的关键字?我不仅需要知道字符串是否包含其中一个单词,还包含它包含的单词。谢谢!

3 个答案:

答案 0 :(得分:2)

您可以按如下方式使用列表推导:

b = [list_item for list_item in my_list if list_item in my_string]

for i in b:
    print i

[OUTPUT]
lorem ipsum

或者,您可以在循环浏览my_list

时打印出匹配项
for i in my_list:
    if i in my_string:
        print i

[OUTPUT]
lorem ipsum

答案 1 :(得分:1)

这是使用list comprehension的一种方式:

>>> my_list = ['foobar', 'lorem ipsum', 'hello world!']
>>> my_string = 'lorem ipsum dolor sit amet, consectetur adipiscing elit.'
>>> [item for item in my_list if item in my_string]
['lorem ipsum']

答案 2 :(得分:1)

这个问题:

[list_item for list_item in my_list if list_item in my_string]

即使子字符串只是部分字,in运算符也会匹配:

>>> "is" in "isn't"
True

为此:

my_list = ['foobar', 'lorem ipsum', 'mylorem ipsum', 'hello world!']
my_string = 'mylorem ipsum dolor sit amet, consectetur adipiscing elit.'
print [list_item for list_item in my_list if list_item in my_string]
# ['lorem ipsum', 'mylorem ipsum']

您可能会或可能不会这样。

要解决此问题,请使用正则表达式:

>>> bool(re.search(r'\bis\b', "isn't"))
False
>>> bool(re.search(r'\bis\b', " tra la  is"))
True

如果您想限制自己完成匹配(即,'lorem ipsum'只匹配那个确切的字符串而不是'mylorem ipsum'),您可以使用正则表达式:

import re

my_list = ['foobar', 'lorem ipsum', 'mylorem ipsum', 'hello world!']
my_string = 'mylorem ipsum dolor sit amet, consectetur adipiscing elit.'

print [s for s in my_list if re.search(r'\b{}\b'.format(s), my_string)]
# ['mylorem ipsum']