【发布时间】:2013-04-04 20:56:29
【问题描述】:
我希望能够使用用户输入通配符在 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)
这是正确的做法吗?不知道有没有必要。
关于“传递正则表达式”的最佳方法是什么,以及我在代码中的错误的想法,因为它没有对第二组代码中的传入文本字符串进行操作它(正确地)在第一个。
【问题讨论】:
-
你为什么不直接使用
re?
标签: python regex python-3.x wildcard file-handling