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
[match]后立即退出True
- 您可以在这里使用
代码:
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
[match]后立即退出True
如果不希望在没有匹配项时引发异常,则必须将
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的用例。