我使用以下函数来查找字符串中单词的完全匹配.
def exact_Match(str1, word):
result = re.findall('\\b'+word+'\\b', str1, flags=re.IGNORECASE)
if len(result)>0:
return True
else:
return False
exact_Match(str1, word)
但是,如果只是因为以下字符串获奖,我会得到“奖励”和“获奖”这两个词的完全匹配.
str1 = "award-winning blueberries"
word1 = "award"
word2 = "award-winning"
我如何才能得到它,以便re.findall将整个单词与连字符和其他标点符号相匹配?
最佳答案 制作自己的单词边界:
def exact_Match(phrase, word):
b = r'(\s|^|$)'
res = re.match(b + word + b, phrase, flags=re.IGNORECASE)
return bool(res)
从这里复制粘贴到我的翻译:
>>> str1 = "award-winning blueberries"
>>> word1 = "award"
>>> word2 = "award-winning"
>>> exact_Match(str1, word1)
False
>>> exact_Match(str1, word2)
True
实际上,铸造到bool是不必要的,根本没有帮助.没有它,功能会更好:
def exact_Match(phrase, word):
b = r'(\s|^|$)'
return re.match(b + word + b, phrase, flags=re.IGNORECASE)
注意:exact_Match是非常规的套管.只需将其称为exact_match.