代码之家  ›  专栏  ›  技术社区  ›  J Cena

构造正则表达式模式以识别单词的子集

  •  0
  • J Cena  · 技术社区  · 6 年前

    我想通过使用 values() 以下词典的。

    creategarbageterms = {'tim_tam' : ['tim_tam','yummy_tim_tam', 'berry_tim_tam'],
                          'pudding': ['pudding', 'chocolate_pudding', 'biscuits', 'tiramusu'],
                          'ice_cream': ['ice_cream', 'vanilla_ice_cream']}
    

    i、 e.给定以下字符串;

    **Term  ->    Output**
    wow_yummy_tim_tam -> yes
    melted_tim_tam ->yes
    berry_tim_tam -> Yes
    cherry_berry_tim_tam -> yes
    wow_tam -> No
    wow_m -> No
    wow_ti -> No
    Wow_tim_t -> No
    

    我当前的代码/模式如下。

    creategarbageterms = {'tim_tam' : ['tim_tam','yummy_tim_tam', 'berry_tim_tam'],
                          'pudding': ['pudding', 'chocolate_pudding', 'biscuits', 'tiramusu'],
                          'ice_cream': ['ice_cream', 'vanilla_ice_cream']}
    
    pattern = re.compile(r'|'.join([r'(\s|\b){}\b'.format(x) for x in creategarbageterms.values()]))
    if re.findall(pattern, "wow_m".replace("_", " ")):
        print("yes")
    else:
       print("no")
    

    然而,在我当前的代码中,上面提到的 No 条款也被接受。请让我知道我哪里做错了?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ajax1234    6 年前

    我认为您不需要正则表达式来检查字符串中是否存在。相反,使用 in re 拆分字符串:

    import re
    creategarbageterms = {'tim_tam' : ['tim_tam','yummy_tim_tam', 'berry_tim_tam'],
                      'pudding': ['pudding', 'chocolate_pudding', 'biscuits', 'tiramusu'],
                      'ice_cream': ['ice_cream', 'vanilla_ice_cream']}
    
    s =  ['wow_yummy_tim_tam', 'melted_tim_tam, berry_tim_tam', 'cherry_berry_tim_tam', 'wow_tam', 'wow_m', 'wow_ti', 'Wow_tim_t']
    for c in s:
       truthy = any(any(i in c for i in b) for a, b in creategarbageterms.items())
       if truthy:
           print("Yes")
       else:
           print("no")
    

    输出:

    Yes
    Yes
    Yes
    no
    no
    no
    no