如果匹配则返回匹配

时间:2017-02-07 13:31:07

标签: python pattern-matching

我正在做一些模式匹配,并想检查字符串的一部分是否出现在字符串列表中。 做这样的事情:

if any(x in line for x in aListOfValues):

除了行吗?还可以返回x的值吗?

3 个答案:

答案 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'])