如何使用Python精确匹配列表中的字符串

问题描述 投票:0回答:1

我想精确搜索某个字符串是否在命令列表中。如果是,则将其附加到匹配列表中。然而,它并没有给我想要的结果。

cmd_list = ["passwd", "/etc/passwd"]
string = "[cat /etc/passwd | grep finftp]"

matches = []

for word in sorted(cmd_list):
    if word in string:
       matches.append(word)      
print(matches) 

预期输出应该只是“/etc/passwd”。但它在这里显示了这个输出: ['/etc/passwd', 'passwd'].我知道另一种方法,就像给它一个条件,但这不是一个理想的解决方案,因为我有很多命令列表,而且所有命令列表都可能是动态的。

python string list search
1个回答
0
投票

您遇到的问题是由于您使用的是

in
运算符,该运算符检查给定字符串中是否存在子字符串。在您的情况下,“passwd”和“/etc/passwd”都作为输入字符串“[cat /etc/passwd | grep finftp]”中的子字符串出现。这就是为什么“passwd”和“/etc/passwd”都被添加到
matches
列表中。

如果您想从

cmd_list
中搜索精确匹配项,您可以修改代码以将
cmd_list
中的每个单词与整个字符串进行比较,而不是使用
in
运算符:

cmd_list = ["passwd", "/etc/passwd"]
string = "[cat /etc/passwd | grep finftp]"

matches = []

for word in sorted(cmd_list):
    if word == string.strip("[]"):
        matches.append(word)
        
print(matches)

在此代码中,

string.strip("[]")
用于在将输入字符串与
cmd_list
中的每个单词进行比较之前删除方括号。这将确保您获得所需的精确匹配。预期输出将是
['/etc/passwd']

© www.soinside.com 2019 - 2024. All rights reserved.