我只想检查给定字符串是否包含字典中的单词
names = ["Joe", "Smith", "Nancy"]
string = "Her name was Nancy"
if names in string:
print(name)
对于本例,我希望它输出名称'Nancy'
你好,我想这可以解决你的问题:
string = "Her name was Nancy"
names = ["Joe", "Smith", "Nancy"]
for name in names:
if name in string:
print("True")
您可以使用re
:
import re
names = ["Joe", "Smith", "Nancy"]
string = "Her name was Nancy. His name was Smith"
result = re.findall('|'.join(names), string)
print(*result, sep='n')
Nancy
Smith
有几点。首先,names
是一个列表而不是字典,而string
恰好是一个字符串。所以在你提供的代码中没有字典。无论如何,看起来您想要查看列表中的元素是否包含在字符串中。为此,您应该遍历列表,然后检查每个元素是否在目标字符串内。然后,您可以简单地打印匹配项。
names = ["Joe", "Smith", "Nancy"]
string = "Her name was Nancy"
for name in names:
if name in string:
print(name)
您可以使用带有生成器表达式和可选默认值的next
执行以下操作:
name = next((n for n in names if n in string), None)
print(name)
,
x = next(iterator, default)
是以下习语的简写:
for x in iterator:
break # take the first if present
else:
x = default # or fallback
如果您只想匹配字符串中的整个单词(令牌),您可能需要先将其str.split
:
tokens = set(string.split()) # set has a better contains-check
name = next((n for n in names if n in tokens) , None)
一些文档:
next
set
str.split
- for-else and
break
< - 生成器表达式/gh>
python列表推导语法:
[print(name) for name in names if name in string]
如果你想把结果存储在var中:
res = [name for name in names if name in string]
根据您所写的内容,names
不是字典,而是数组。假设names
确实是一个数组,这应该可以满足您的要求。
names = ["Joe", "Smith", "Nancy"]
string = "Her name was Nancy"
for name in names:
if names in string:
print(name)