针对字符串测试多个子字符串

时间:2016-02-18 09:15:30

标签: python

如果我有一个字符串列表:

matches = [ 'string1', 'anotherstring', 'astringystring' ]

我还有另一个我要测试的字符串:

teststring = 'thestring1'

我想测试每个字符串,如果有任何匹配,请做一些事情。我有:

match = 0
for matchstring in matches:
  if matchstring in teststring:
    match = 1
if !match:
  continue

这是一个循环,所以如果我们没有得到一个匹配,我们就再来一次(我当然可以改变这个逻辑并做一些匹配的事情),但代码看起来很笨拙而不是pythonic,如果简单的话跟随。

我认为有更好的方法可以做到这一点,但我并不像我想的那样grok python。有更好的方法吗?

注意“重复”是相反的问题(尽管相同的答案方法是相同的)。

3 个答案:

答案 0 :(得分:4)

您可以在这里使用image here

<强>代码:

if any(matchstring in teststring for matchstring in matches):
    print "Matched"

备注:

  • any会在看到匹配后立即退出。
  • 根据循环,正在发生的事情是for matchstring in matches,此处matches中的每个字符串都会被迭代。
  • 这里matchstring in teststring我们正在检查迭代的字符串是否在定义的检查字符串中。
  • any会在表达式中看到True [匹配]后立即退出。

答案 1 :(得分:1)

如果您想知道第一场比赛是什么,可以使用next

match = next((match for match in matches if match in teststring), None)

如果您不希望在没有任何内容匹配时引发异常,则必须将None作为第二个参数传递。它会将该值用作默认值,因此如果找不到任何内容,match将为None

答案 2 :(得分:0)

你怎么试试这个:

len([ x for x in b if ((a in x) or (x in a)) ]) > 0

我已经更新了答案以检查子串两种方式。您可以根据需要选择或修改,但我认为基础知识应该非常清楚。