我正在尝试检查我的字典键是否可以在字符串中找到。关键是我的代码本身不匹配整个字符串,而是遍历每个字符。
我尝试过这样:
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}$", text, re.IGNORECASE):
print(x + " match")
应该匹配确切的出现,但不给出结果。为什么?
请注意,我的字典键可能包含空格,因此按空格分隔文本将无效。
答案 0 :(得分:1)
这是解决方法:
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
答案 1 :(得分:0)
您可以尝试使用正则表达式
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使其更适合您的需求!
答案 2 :(得分:-1)
此代码:
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