我正在使用Python 3进行演示。有一个示例字符串:
a =“学习就是学习,才能学会”
s =“@wen is @ and wen @”
我想完全匹配“学习”和“@”,即不提取学习(或@wen)或elearn(或wen @)。因此,我应该'学习'和'@'。
re.findall(r'\blearn\b', a) # works
['learn']
or
re.sub(r'\blearn\b', 'z', a) # works
'learning is z and elearn'
re.findall(r'\b@\b', s) # not working
[]
or
re.sub(r'\b@\b', 'z', s) # not working
'@wen is @ and wen@'
答案 0 :(得分:2)
来自the docs:
\b
匹配空字符串,但仅匹配单词的开头或结尾。单词被定义为字母数字或下划线字符的序列,因此单词的结尾由空格或非字母数字的非下划线字符表示。请注意,正式地,\b
被定义为\w
和\W
字符之间的边界(反之亦然),或\w
与字符串的开头/结尾之间的边界
在您的示例中,@
是由其他非字母数字字符包围的非字母数字(和非下划线)字符。由于没有单词字符,因此没有单词边界,因此\b
将不匹配。