我正在做一些模式匹配,并想检查字符串的一部分是否出现在字符串列表中。 做这样的事情:
if any(x in line for x in aListOfValues):
除了行吗?还可以返回x的值吗?
答案 0 :(得分:3)
您可以使用next()
从类似的生成器中检索下一个匹配项,默认值为False
。请注意,这仅返回第一个匹配,显然不是每个匹配。
match = next((x for x in aListOfValues if x in line), False)
或者,一个非常简单的解决方案可能是将当前语句解构为循环并返回包含x
以及该行的元组。
def find(line, aListOfValues):
for x in aListOfValues:
if x in line:
return x, line
return False, line
答案 1 :(得分:1)
您可以使用next
消费匹配时返回的第一个项目。请注意,如果您不确定是否要找到某种模式,则必须防范StopIteration
例外:
try:
print (next(x for x in aListOfValues if x in line))
except StopIteration:
print("Not found")
答案 2 :(得分:0)
aListOfValues = ["hello", "hallo"]
line = "hello world"
#classic one
res = [x for x in aListOfValues if x in line]
print res
>>['hello']
# back to your case
if any(x in line for x in aListOfValues):
print set(aListOfValues) & set(line.split())
>> set(['hello'])
match = set(aListOfValues) & set(line.split())
if match: #replace any query
print match
>> set(['hello'])