我有一个项目列表,我在一个大字符串中搜索这些项目中的任何一个。我怎样才能只调用找到的项目?
现在,我可以搜索列表项,但是我将返回整个字符串,而不仅仅是我要搜索的列表项。例如:
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
这会按预期返回整个字符串,但是如何只获取我正在搜索的关键字?我不仅需要知道字符串是否包含其中一个单词,还包含它包含的单词。谢谢!
答案 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']