如何使用Python匹配字符串中的子字符串

时间:2016-06-12 12:27:24

标签: python list substring

我有一个子串列表,我必须迭代地匹配一个字符串;如果匹配则执行所需的功能。

问题在于,每当我尝试使用循环访问列表时,它都不起作用。否则,如果我硬编码,那么它的工作原理。我不明白为什么会这样?

我的代码在这里:

players_list = ['Circket', 'PSL', 'IPL', 't20', 'shahid afridi', 'aamer yamin']
length = len(players_list)
cur.execute("SELECT tweet FROM tweets_data")  # Query for getting specific attribute
length = len(players_list)
for row in cur.fetchall():
    i = 0
    while (i<length):
        #print players_list[i], 'tweet value', row
        if players_list[i] in row:
            print 'list item:', players_list[i]
            print row
        else:
            print 'Else statement.'
        i+=1

输出:它应该只显示与任何子字符串值匹配的行,如:

子串:板球
:安全官员担心板球团队以激进分子的名字命名

2 个答案:

答案 0 :(得分:1)

您似乎有Circket的拼写错误。此外,不需要使用索引 - 只需直接循环players_list,确保播放器和行都具有可预测的大小写。类似的东西:

players_list=['Cricket','PSL','IPL','t20','shahid afridi','aamer yamin']

cur.execute("SELECT tweet FROM tweets_data")  # Query for getting specific attribute
for row in cur.fetchall():
    for player in players_list: 
        if player.lower() in row.lower():
            print 'list item:', player
            print row
        else:
            print 'Else statement.'

答案 1 :(得分:-1)

如果我理解你的问题,你可以试试这个:

players_list = ['Cricket', 'PSL', 'IPL', 't20', 'shahid afridi', 'aamer yamin']
cur.execute("SELECT tweet FROM tweets_data")
for row in cur.fetchall():
    if any(True for p in players_list if p.lower() in row.lower()):
        print(row)
    else:
        print ("Else statement")