如何检查字符串是否包含字符串的完全匹配?

时间:2020-09-24 12:11:43

标签: python string pattern-matching

我正在尝试检查我的字典键是否可以在字符串中找到。关键是我的代码本身不匹配整个字符串,而是遍历每个字符。

我尝试过这样:

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")

应该匹配确切的出现,但不给出结果。为什么?

请注意,我的字典键可能包含空格,因此按空格分隔文本将无效。

3 个答案:

答案 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