在字典中搜索字符串'具有多个通配符值的文件

时间:2014-05-10 03:35:53

标签: string python-3.x wildcard

我正在尝试创建一个需要2个参数的函数。一个带有通配符的单词,如" * arn * val"以及包含字典的文件名。它会返回与["嘉年华"]等单词匹配的所有单词的列表。

我的代码适用于只有一个" *"然而,在其中,我不知道如何去做。

只是在文件中搜索通配符字符串没有返回任何内容。

这是我的代码:

dictionary_file = open(dictionary_filename, 'r')
dictionary = dictionary_file.read()
dictionary_file.close()
dictionary = dictionary.split()

alphabet = ["a","b","c","d","e","f","g","h","i",
            "j","k","l","m","n","o","p","q","r",
            "s","t","u","v","w","x","y","z"]

new_list = []

for letter in alphabet:
    if wildcard.replace("*", letter) in dictionary:
        new_list += [wildcard.replace("*", letter)]

return new_list

参数参数:第一个是通配符字符串(通配符),第二个是字典文件名(dictionary_filename)。

本网站上的大多数答案都是关于Regex,我不知道。

1 个答案:

答案 0 :(得分:1)

您的特定错误是.replace替换了所有出现的内容,例如"*arn*val" - > "CarnCval""IarnIval"。你想要不同的字母。您可以在字母表上使用第二个嵌套循环(或使用itertools.product()生成所有可能的字母对)来修复它,但更简单的方法是使用正则表达式:

import re

# each `*` corresponds to an ascii lowercase letter
pattern = re.escape(wildcard).replace("\\*", "[a-z]")
matches = list(filter(re.compile(pattern+"$").match, known_words))

注意:它不支持在*中转义wildcard

如果输入通配符是文件模式,那么您可以使用fnmatch module来过滤单词:

import fnmatch

matches = fnmatch.filter(known_words, wildcard)