Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查字符串是否包含与字符串完全匹配的内容?_Python_String_Pattern Matching - Fatal编程技术网

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

Python 如何检查字符串是否包含与字符串完全匹配的内容?,python,string,pattern-matching,Python,String,Pattern Matching,我正在检查我的dict密钥是否可以在字符串中找到。问题是我的代码不匹配整个字符串,而是遍历每个字符 我这样试过: 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 而不仅仅

我正在检查我的dict密钥是否可以在字符串中找到。问题是我的代码不匹配整个字符串,而是遍历每个字符

我这样试过:

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

应匹配精确的发生率,但不给出结果。为什么?

请注意,我的dict键可能包含空格,因此按空格分割文本将不起作用。

这是修复方法:

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以更好地满足您的需求

1/2在文本中,1也在文本中。但它们的键后是否有空格?“1/2点”会出现吗?这能回答你的问题吗@ChristianSloper这可能也会发生,但现在主要的问题是你们之间的空间,你们可能应该告诉我们你们试图做什么背后的更大的想法。您的代码确实找到了精确的匹配项并正常工作,您的问题在别处。不幸的是,这将无法工作,因为我的dict键可能包含空格well@jabba请参阅我提供的上述链接。您的问题已在此网站上得到解答。要么将其标记为重复项,要么将其删除…只匹配字符串开头的匹配项,您可能是指搜索