在字符串中查找列表项的整个部分,而不是子部分?
Find whole part of list item, not subparts, in a string?
我有一个键和值的字典(为便于阅读而大量截断):
responsePolarities = {'yes':0.95, 'hell yes':0.99, 'no':-0.95, 'hell no':-0.99, 'okay':0.70}
我正在检查传递给我函数的字符串中是否有任何键:
for key, value in responsePolarities.items():
if key in string:
return value
问题在于,如果在传递的字符串中包含 "know" 之类的单词,函数会在 'know' 和 returns 中看到 'no' -0.95。
我无法在 'no' 键周围添加空格,因为它可能是提供的唯一响应。
如何让函数将 'no' 视为 'no' 而不是 'know'?我是否正确地认为这可能需要一个 RegExp 工作,还是我遗漏了一些更简单的东西?
我想过将我传递的字符串拆分成单独的词,但后来我无法检查修改响应极性的多词短语(比如 no vs. hell no)...
如果我没有理解错的话,您想要匹配包含您的键的文本,但前提是整个单词都匹配。您可以使用正则表达式单词边界定界符 \b
来执行此操作。它会匹配由标点符号分隔的单词,如 :no,
但不会匹配其他单词字符,如 know
。在这里,您循环遍历一些字符串,并为每个字符串在字典中找到匹配的键:
responsePolarities = {'yes':0.95, 'hell yes':0.99, 'no':-0.95, 'hell no':-0.99, 'okay':0.70}
strings = [
'I know nothing',
'I now think the answer is no',
'hell, mayb yes',
'or hell yes',
'i thought:yes or maybe--hell yes--'
]
for s in strings:
for k,v in responsePolarities.items():
if re.search(rf"\b{k}\b", s):
print(f"'{s}' matches: {k} : {v}")
'I know nothing'
不应匹配任何内容。匹配项应如下所示:
'I now think the answer is no' matches: no : -0.95
'hell, mayb yes' matches: yes : 0.95
'or hell yes' matches: yes : 0.95
'or hell yes' matches: hell yes : 0.99
'i thought:yes or maybe--hell yes--' matches: yes : 0.95
'i thought:yes or maybe--hell yes--' matches: hell yes : 0.99
如果您要进行大量搜索,您可以考虑在循环之前预编译正则表达式。
我有一个键和值的字典(为便于阅读而大量截断):
responsePolarities = {'yes':0.95, 'hell yes':0.99, 'no':-0.95, 'hell no':-0.99, 'okay':0.70}
我正在检查传递给我函数的字符串中是否有任何键:
for key, value in responsePolarities.items():
if key in string:
return value
问题在于,如果在传递的字符串中包含 "know" 之类的单词,函数会在 'know' 和 returns 中看到 'no' -0.95。
我无法在 'no' 键周围添加空格,因为它可能是提供的唯一响应。
如何让函数将 'no' 视为 'no' 而不是 'know'?我是否正确地认为这可能需要一个 RegExp 工作,还是我遗漏了一些更简单的东西?
我想过将我传递的字符串拆分成单独的词,但后来我无法检查修改响应极性的多词短语(比如 no vs. hell no)...
如果我没有理解错的话,您想要匹配包含您的键的文本,但前提是整个单词都匹配。您可以使用正则表达式单词边界定界符 \b
来执行此操作。它会匹配由标点符号分隔的单词,如 :no,
但不会匹配其他单词字符,如 know
。在这里,您循环遍历一些字符串,并为每个字符串在字典中找到匹配的键:
responsePolarities = {'yes':0.95, 'hell yes':0.99, 'no':-0.95, 'hell no':-0.99, 'okay':0.70}
strings = [
'I know nothing',
'I now think the answer is no',
'hell, mayb yes',
'or hell yes',
'i thought:yes or maybe--hell yes--'
]
for s in strings:
for k,v in responsePolarities.items():
if re.search(rf"\b{k}\b", s):
print(f"'{s}' matches: {k} : {v}")
'I know nothing'
不应匹配任何内容。匹配项应如下所示:
'I now think the answer is no' matches: no : -0.95
'hell, mayb yes' matches: yes : 0.95
'or hell yes' matches: yes : 0.95
'or hell yes' matches: hell yes : 0.99
'i thought:yes or maybe--hell yes--' matches: yes : 0.95
'i thought:yes or maybe--hell yes--' matches: hell yes : 0.99
如果您要进行大量搜索,您可以考虑在循环之前预编译正则表达式。