Как я могу сопоставить похожие строки? - PullRequest
0 голосов
/ 27 марта 2020

Я работаю над программой и застрял на одной части. Моя программа принимает пользовательский ввод строки, которая также содержит символ '*'. Что мне нужно сделать, это сопоставить эту строку с любым из похожих словарных ключей.

Например:

dict = {'Mazda': [[2, 'brown', '2006']], 'Jaguar': [[1, 'black', '2020']],
 'Lamborghini': [[0, 'red', '2009']], 'Camaro SS': [[1, ''Matte Black', '1969']], 
'Dodge': [[1, 'grey', '2012']], "twin turbo'camaro": [[2, 'lime green', '2016']] }

Если пользователь введет:

'*amaro'

or

'Cam*ro'

or 

'Camar*'

Он найдет все случаи, где есть «Camaro» в ключах словаря.

код до сих пор ...

name = input('Enter * for the missing letter ')
name = name.replace('*', '') # I was thinking if I took the hash out I can sort through they keys and find the most similar instances 
if name in dict.keys():
   nName = dict.get(name)

Если код сработал, единственное, что мне нужно, это подтверждение того, что два ключа были найдены из пользовательского ввода:

Camaro SS

twin turbo'camaro

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

Немного изменив ответ @ mrzo, вы хотите использовать re.search с поиском без учета регистра (re.search вместо re.match, потому что мы не ищем полное совпадение ключей):

name = input('Enter * for the missing letter ')

regex_name = name.replace('*', '.')

for car in cars:
    if re.search(regex_name, car, re.IGNORECASE):
        print(name, "matches", car)

, где cars - ваш словарь. Не называйте dict.

Использование подстановочного знака . эквивалентно любому символу в регулярном выражении.

1 голос
/ 27 марта 2020

Вы можете использовать регулярные выражения. . обозначает здесь подстановочный знак

import re

cars = {
    'Mazda': [[2, 'brown', '2006']], 
    'Jaguar': [[1, 'black', '2020']],
    'Lamborghini': [[0, 'red', '2009']], 
    'Camaro SS': [[1, 'Matte Black', '1969']], 
    'Dodge': [[1, 'grey', '2012']], 
    "twin turbo'camaro": [[2, 'lime green', '2016']] 
}

name = input('Enter * for the missing letter ')

regex_name = name.replace('*', '.')

for car in cars:
    if re.match(regex_name, car):
        print(name, "matches", car)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...