问题描述
我正在尝试检查我的字典键是否可以在字符串中找到。关键是我的代码本身不匹配整个字符串,而是遍历每个字符。
我尝试过这样:
val_dict= {'1/2 pint': 'half','1': 'one','5': 'five'}
text = 'I need 1/2 pint of beer'
for x in val_dict:
if x in text:
print(x,val_dict.get(x))
但是我得到了
1/2 pint half
1 one
不只是“一半”。怎么解决呢?据我所知,'/'不是转义字符。
for x in val_dict:
if re.search(rf"\b{x}\b",text,re.IGnorECASE):
print(x + " match")
>>> 1/2 pint match
>>> 1 match
可以,因为\b
,但是:
for x in val_dict:
if re.search(rf"^{x}$",re.IGnorECASE):
print(x + " match")
应该匹配确切的出现,但不给出结果。为什么?
请注意,我的字典键可能包含空格,因此按空格分隔文本将无效。
解决方法
这是解决方法:
val_dict= {'1/2': 'half','1': 'one','5': 'five'}
text = 'I need 1/2 pint of beer'
for x in val_dict:
if x in text.split(' '):
print(x,val_dict.get(x))
输出
1/2 half
,
您可以尝试使用正则表达式
import re
val_dict= {r'1/2': 'half',r'1[!/]': 'one','5': 'five'}
# ^"1/2"^ ^ 1 with NO SLASH
text = 'I need 1/2 pint of beer'
for x in val_dict:
if re.match(x,text):
print(x,val_dict.get(x))
预期输出:
1/2 half
您可以定制RegEx使其更适合您的需求!
,此代码:
dict1 = {'1': 'one','2': 'two' 'small': 'small'}
text = "number 1 is small"
for latter in dict1.keys():
if latter in text:
print(f"{dict1[latter]} in str")
将输出:
one in str
small in str