Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在'中搜索字符串;字典';具有多个通配符值的文件_String_Python 3.x_Wildcard - Fatal编程技术网

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

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

我正在尝试创建一个函数,它将包含两个参数。包含通配符的单词,如“*arn*val”,以及包含字典的文件名。它返回与该单词匹配的所有单词的列表,如[“carnival”]

我的代码对于任何只包含一个“*”的代码都可以很好地工作,但是再多的代码我就不知道该怎么做了

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

这是我的密码:

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)

谢谢,代码现在运行得很好。我觉得正则表达式是我现在必须研究的东西,这样我才能真正理解它。