String 在'中搜索字符串;字典';具有多个通配符值的文件
我正在尝试创建一个函数,它将包含两个参数。包含通配符的单词,如“*arn*val”,以及包含字典的文件名。它返回与该单词匹配的所有单词的列表,如[“carnival”] 我的代码对于任何只包含一个“*”的代码都可以很好地工作,但是再多的代码我就不知道该怎么做了 只是在文件中搜索通配符字符串没有返回任何内容 这是我的密码:String 在'中搜索字符串;字典';具有多个通配符值的文件,string,python-3.x,wildcard,String,Python 3.x,Wildcard,我正在尝试创建一个函数,它将包含两个参数。包含通配符的单词,如“*arn*val”,以及包含字典的文件名。它返回与该单词匹配的所有单词的列表,如[“carnival”] 我的代码对于任何只包含一个“*”的代码都可以很好地工作,但是再多的代码我就不知道该怎么做了 只是在文件中搜索通配符字符串没有返回任何内容 这是我的密码: dictionary_file = open(dictionary_filename, 'r') dictionary = dictionary_file.read() dic
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
参数:第一个是通配符字符串(通配符),第二个是字典文件名(字典\文件名)
这个网站上的大多数答案都是关于Regex的,我对此一无所知。你的具体错误是
。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))
注意:它不支持在通配符中转义*
如果输入通配符是文件模式,则可以使用来过滤单词:
import fnmatch
matches = fnmatch.filter(known_words, wildcard)
谢谢,代码现在运行得很好。我觉得正则表达式是我现在必须研究的东西,这样我才能真正理解它。