0

我希望能够使用用户输入通配符在 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)

这是做这件事的正确方法吗?我不知道是否需要。

什么是“传递正则表达式”的最佳方法,以及我在代码中的错误的想法,因为它没有像它那样对第二组代码中的传入文本字符串进行操作(正确)在第一个。

4

1 回答 1

1

如果问题只是你“有空格而且它不是一个列表”,为什么不把它变成一个列表呢?

with open('testfilefolder/wssnt10.txt') as f:
 file_contents = f.read().lower().split(' ') # split line on spaces to make a list
 filtered = fnmatch.filter(file_contents, 'th*')
于 2013-04-04T22:15:10.510 回答