我希望能够使用用户输入通配符在 Python 中搜索字典。
我发现了这个:
import fnmatch
lst = ['this','is','just','a','test', 'thing']
filtered = fnmatch.filter(lst, 'th*')
这符合这个和事情。现在,如果我尝试输入整个文件并搜索
with open('testfilefolder/wssnt10.txt') as f:
file_contents = f.read().lower()
filtered = fnmatch.filter(file_contents, 'th*')
这不匹配任何东西。不同之处在于,在我正在读取的文件中,我是一个文本文件(莎士比亚戏剧),所以我有空格,它不是一个列表。我可以匹配诸如单个字母之类的东西,所以如果我只有“t”,那么我会得到一堆 t。所以这告诉我我正在匹配单个字母 - 但是我想要匹配整个单词 - 但更重要的是,要保留通配符结构。
因为我想要发生的是用户输入文本(包括将成为通配符的内容),我可以将其替换为 'th*' 所在的位置。外卡会做它应该做的事情。这就引出了一个问题,我可以只插入一个变量来保存“th*”的搜索文本吗?经过一番调查,我想知道我是否应该以某种方式翻译“th*”,并找到了以下内容:
regex = fnmatch.translate('th*')
print(regex)
哪个输出 th.*\Z(?ms)
这是做这件事的正确方法吗?我不知道是否需要。
什么是“传递正则表达式”的最佳方法,以及我在代码中的错误的想法,因为它没有像它那样对第二组代码中的传入文本字符串进行操作(正确)在第一个。