将特定单词与列表中的字符串匹配。完全匹配而不是部分匹配

2024-04-29 14:54:19 发布

您现在位置:Python中文网/ 问答频道 /正文

delete = ["man", "eat"]

item_list = ['sharper_task|$none_venue|man', 'sharper_task|man_venue|king', 'sharper_task|king_venue|world', 'sharper_task|world_venue|dont', 'sharper_task|を_venue|eater', 'sharper_task|eater_venue|todo', 'sharper_task|todo_venue|,']

我的代码:

lst = []
for x in item_list:
    if not any(y in x for y in delete):
        lst.append([x, x])

print(lst)

但是,这种方法会使我的输出变得非常麻烦。例如,如果我的delete包含delete=[“man”,“eat”],这与item\u列表中的单词“eater”不相似,但程序仍会接受它,因为我使用了if not any(x中的y)这个“IN”将返回true,因为eat包含在eater中,但我想要的不是包含在单词中,而是匹配的。我想把单词eater与eater和man与man匹配起来,而不是eater与eater和ma与man匹配起来。你知道吗

有没有办法做到完全匹配而不是部分匹配??我目前的代码采取部分匹配,这是如此错误,当我有许多部分字删除。你知道吗


Tags: intaskworlditemdelete单词todolist
3条回答

然后可以检查字符串是否完全匹配:

    delete = ["man", "eat"]

    item_list = ['sharper_task|$none_venue|man', 'sharper_task|man_venue|king', 'sharper_task|king_venue|world', 'sharper_task|world_venue|dont', 'sharper_task|を_venue|eater', 'sharper_task|eater_venue|todo', 'sharper_task|todo_venue|,']


    lst = []
    for x in item_list:
        if not any(y == x for y in delete):
            lst.append([x, x])

    print(lst)


#  [['sharper_task|$none_venue|man', 'sharper_task|$none_venue|man'], ['sharper_task|man_venue|king', 'sharper_task|man_venue|king'], ['sharper_task|king_venue|world', 'sharper_task|king_venue|world'], ['sharper_task|world_venue|dont', 'sharper_task|world_venue|dont'], ['sharper_task|を_venue|eater', 'sharper_task|を_venue|eater'], ['sharper_task|eater_venue|todo', 'sharper_task|eater_venue|todo'], ['sharper_task|todo_venue|,', 'sharper_task|todo_venue|,']]

注意:or |运算符在'sharper_task|eater_venue|todo'这样的字符串中没有任何用处。你知道吗

在使用in运算符测试delete中的项是否位于其中一个子字符串中之前,可以先将|的字符串拆分为子字符串:

lst = []
for x in item_list:
    if not any(y in s.split('_') for s in x.split('|') for y in delete):
        lst.append([x, x])
print(lst)

这将输出:

[['sharper_task|man_venue|king', 'sharper_task|man_venue|king'], ['sharper_task|king_venue|world', 'sharper_task|king_venue|world'], ['sharper_task|world_venue|dont', 'sharper_task|world_venue|dont'], ['sharper_task|を_venue|eater', 'sharper_task|を_venue|eater'], ['sharper_task|eater_venue|todo', 'sharper_task|eater_venue|todo'], ['sharper_task|todo_venue|,', 'sharper_task|todo_venue|,']]

假设你想在管道角色上分裂

delete = ["man", "eat"]

item_list = ['sharper_task|$none_venue|man', 'sharper_task|man_venue|king', 'sharper_task|king_venue|world', 'sharper_task|world_venue|dont', 'sharper_task|を_venue|eater', 'sharper_task|eater_venue|todo', 'sharper_task|todo_venue|,']

lst = [item 
       for item in item_list 
       if any(word in item.split('|') for word in delete)]

相关问题 更多 >