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

Python 针对一个字符串测试多个子字符串,python,Python,如果我有一个字符串列表: matches = [ 'string1', 'anotherstring', 'astringystring' ] 我还有另一个字符串要测试: teststring = 'thestring1' 我想测试每个字符串,如果有匹配的,做些什么。我有: match = 0 for matchstring in matches: if matchstring in teststring: match = 1 if !match: continue 这是一

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

matches = [ 'string1', 'anotherstring', 'astringystring' ]
我还有另一个字符串要测试:

teststring = 'thestring1'
我想测试每个字符串,如果有匹配的,做些什么。我有:

match = 0
for matchstring in matches:
  if matchstring in teststring:
    match = 1
if !match:
  continue
这是一个循环,所以如果没有匹配,我们只需再次循环(当然,我可以颠倒这个逻辑,如果匹配,我可以做一些事情),但是代码看起来很笨拙,如果很容易理解的话,也不是python式的

我认为有一种更好的方法可以做到这一点,但我对python的理解不如我所希望的那样好。有更好的方法吗

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

您可以在这里使用

代码:

if any(matchstring in teststring for matchstring in matches):
    print "Matched"
注意事项:

if any(matchstring in teststring for matchstring in matches):
    print "Matched"
  • 一看到比赛就退出
  • 根据As循环,Matchs中的matchstring发生了
    这里,
    匹配的每个字符串都被迭代
  • 这里我们检查迭代字符串是否在定义的检查字符串中
  • any
    将在表达式中看到
    True
    [match]后立即退出
    • 您可以在这里使用

      代码:

      if any(matchstring in teststring for matchstring in matches):
          print "Matched"
      
      注意事项:

      if any(matchstring in teststring for matchstring in matches):
          print "Matched"
      
      • 一看到比赛就退出
      • 根据As循环,Matchs中的matchstring发生了
        这里,
        匹配的每个字符串都被迭代
      • 这里我们检查迭代字符串是否在定义的检查字符串中
      • any
        将在表达式中看到
        True
        [match]后立即退出

      如果您想知道第一个匹配是什么,可以使用:


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

      如果您想知道第一次匹配的内容,可以使用:


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

      您如何尝试以下方法:

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

      我已经更新了答案,以双向检查子字符串。您可以根据自己的喜好进行挑选或修改,但我认为基本原则应该非常清楚。

      您可以试试这个:

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


      我已经更新了答案,以双向检查子字符串。您可以根据自己的喜好进行挑选或修改,但我认为基本内容应该非常清楚。

      您需要完全匹配还是部分匹配?
      如果有(在测试字符串中匹配,在匹配中匹配)
      @viakondratiuk“in”使用编译的正则表达式进行子字符串匹配fwiw可能比任何正则表达式都快,并允许您返回任何匹配的substring@PadraicCunningham谢谢,是的,我不关心这里的速度,在这个例子中,我不需要知道比赛是什么,只需要知道它是匹配的。因此,如果将来其中一个不正确,regex.you需要完全或部分匹配吗?
      如果有(在teststring中匹配匹配匹配中的匹配)
      @viakondratiuk“in”使用编译的regex进行子字符串匹配fwiw可能比任何一个都快,并允许您返回任何匹配的substring@PadraicCunningham谢谢,是的,我不关心这里的速度,在这个例子中,我不需要知道比赛是什么,只需要知道它是匹配的。因此,如果将来这两个都不正确,regex。是的,我没有意识到
      任何
      ,尽管我不能遵循
      y中的x代表z中的x
      -这是如何工作的?
      字符串运算符中检查子字符串的出现,
      对于seq中的o
      迭代序列。这是两种不同的功能,使用了相同的关键字。@Rogalski是的,我了解
      中的两种用法,我只是不明白如何在
      中为
      创建的匹配字符串可以在beginning@Paul我想看看这是否有道理是的,我不知道
      any
      ,虽然我不能遵循
      y中的x代表z中的x
      -这是如何工作的?
      字符串运算符中检查子字符串的出现情况,
      在序列中迭代。这是两个不同的功能,使用了相同的关键字。@Rogalski是的,我理解
      中的两个用法,我只是不明白在
      中为
      创建的匹配字符串如何在beginning@Paul添加了查看是否有意义。这将计算匹配中的每个字符串,即使您匹配了第一个字符串并创建了一个要丢弃的列表。确实,它在计算匹配数方面更进一步,可能不需要这样做步骤,但也可能是。使用生成器表达式的sum还可以计算匹配项,避免存储列表,这不是列表comp和len的用例。这将计算匹配项中的每个字符串,即使您匹配了第一个字符串并创建了一个要丢弃的列表。确实,这在计算匹配项方面更进一步,并且这一步可能不需要,但也可能需要。使用生成器表达式求和也会计算匹配项避免存储列表,这不是列表comp和len的用例。