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

2024-05-12 22:19:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用下面字典的values()使用regex模式识别单词的子集

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

即,给定以下字符串

**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术语也被接受。请告诉我哪里做错了


Tags: noyesvaluestimcreamberryicewow
1条回答
网友
1楼 · 发布于 2024-05-12 22:19:00

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

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

相关问题 更多 >