Я хотел бы иметь возможность искать словарь в 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*')
это ни с чем не совпадает. Разница в том, что в файле, который я читаю, я текстовый файл (пьеса Шекспира), поэтому у меня есть пробелы, а не список. Я могу сопоставить такие вещи, как одна буква, поэтому, если у меня есть только «т», я получаю кучу «т». Итак, это говорит мне, что я сопоставляю отдельные буквы - однако я хочу сопоставлять целые слова - но даже больше, чтобы сохранить структуру подстановочных знаков.
Поскольку я хотел бы, чтобы пользователь ввел текст (включая то, что будет подстановочным знаком), я могу заменить его на место, где находится «th *». Дикая карта будет делать то, что она должна делать до сих пор. Это приводит к вопросу, могу ли я просто вставить переменную, содержащую текст поиска, для «th *»? После некоторого расследования мне интересно, должен ли я как-то перевести, например, «th *», и нашел что-то вроде:
regex = fnmatch.translate('th*')
print(regex)
который выводит th.*\Z(?ms)
Это правильный способ сделать это? Я не знаю, нужно ли это.
Как лучше всего было бы «передавать формулы регулярных выражений», а также, возможно, понять, что у меня не так в коде, поскольку он не работает со строкой входящего текста во втором наборе кода, как это происходит ( правильно) в первую.
re
? - person n1xx1   schedule 05.04.2013