我使用以下函数来查找字符串中单词的精确匹配。
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)
但我得到了“award”和“award-wing”两个词的精确匹配,而它只应该是以下字符串的award-wing。
str1 = "award-winning blueberries"
word1 = "award"
word2 = "award-winning"
我怎样才能让re.findall用连字符和其他标点符号来匹配整个单词呢?
给自己定个字眼:
从这里复制粘贴到我的翻译:
实际上,对
bool
的强制转换是不必要的,而且完全没有帮助。如果没有它,功能会更好:注意:
exact_Match
是非常非常规的外壳。就称之为完全匹配。初始方法的问题是
'\\b'
不表示您要查找的零宽度断言搜索。(如果是的话,我会使用r'\b'
,因为反斜杠在正则表达式中会成为真正的麻烦-see this link)来自Regular Expression HOWTO
\b
Word boundary. This is a zero-width assertion that matches only at the beginning or end of a word. A word is defined as a sequence of alphanumeric characters, so the end of a word is indicated by whitespace or a non-alphanumeric character.
因为
-
是非字母数字字符,所以findall正则表达式将在award-wining
中找到award
,但在awards
中找不到。根据你搜索的短语,我也会考虑使用
re.findall
,而不是Elazar建议的re.match
。在您的示例中,re.match
可以工作,但是如果您要查找的单词嵌套在字符串开头以外的任何地方,re.match
将不会成功。相关问题 更多 >
编程相关推荐