我想精确搜索某个字符串是否在命令列表中。如果是,则将其附加到匹配列表中。然而,它并没有给我想要的结果。
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'].我知道另一种方法,就像给它一个条件,但这不是一个理想的解决方案,因为我有很多命令列表,而且所有命令列表都可能是动态的。
您遇到的问题是由于您使用的是
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']
。