【问题标题】:How can I match similar strings?如何匹配相似的字符串?
【发布时间】:2020-03-27 02:54:31
【问题描述】:

我正在开发一个程序并且卡在一个部分。我的程序接受用户输入的字符串,该字符串还包含“*”符号。我需要做的是将此字符串与任何类似的字典键匹配。

例如:

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

【问题讨论】:

    标签: python python-3.x string dictionary


    【解决方案1】:

    稍微修改@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

    使用通配符. 等同于正则表达式中的任何字符。

    【讨论】:

      【解决方案2】:

      您可以使用正则表达式。 . 在这里代表通配符

      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)
      

      【讨论】:

      • 使用re.search 而不是re.match
      • @Austin 是否有为初学者提供完整的正则表达式文档?
      猜你喜欢
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 2021-08-19
      • 2011-05-11
      • 2014-05-15
      • 2011-12-14
      相关资源
      最近更新 更多