Python:正则表达式使用用户输入通配符的字典

时间:2013-04-04 20:56:30

标签: python regex python-3.x wildcard file-handling

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

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

关于“传递正则表达式公式”的最佳方法是什么,以及可能是我在代码中出错的一个想法,因为它不是对第二组代码中的传入文本字符串进行操作它确实(正确地)在第一个。

1 个答案:

答案 0 :(得分: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*')