是零宽单词边界断言,匹配一侧为w(字母、数字、下划线)、另一侧为W或字符串边界的位置,不匹配实际字符;下划线被视为单词字符,故word_1中_两侧无。

Python正则表达式中的 表示单词边界(word boundary),它不匹配任何实际字符,而是一个**零宽断言**——只匹配位置,且该位置一边是 w(字母、数字、下划线),另一边不是 w(即 W 或字符串起始/结束)。
什么是单词边界 ?
的本质是“左右字符类型不同”:一边属于 [a-zA-Z0-9_],另一边不属于(包括空格、标点、行首、行尾等)。注意:下划线 _ 被视为单词字符,所以 word_1 中的 _ 两侧都算单词内部, 不会出现在下划线旁边。
-
r'cat'匹配独立的 "cat",不匹配 "category" 或 "scatter" -
r'cat'匹配以 "cat" 结尾的单词,如 "chat cat" 中的 "cat",但不匹配 "cats" -
r'cat'匹配以 "cat" 开头的单词,如 "catapult",但不匹配 "scatter"
B:非单词边界
B 是 的逻辑反面:匹配两个 w 字符之间,或两个 W 字符之间的位置(即“非边界”)。常用于排除独立词、匹配复合词内部。
-
r'catB'匹配后面紧接单词字符的 "cat",如 "cats"、"catalog",但不匹配单独的 "cat" -
r'B_B'可匹配中间的下划线(如user_name中的_),因为前后都是w
常见误区与注意事项
初学者易混淆 和字符串边界 ^/$,也容易忽略下划线的单词属性。
立即学习“Python免费学习笔记(深入)”;
-
不等于空格:它在标点(如.、,)、换行符、字符串开头/结尾处也都成立 - 中文文本中
基本无效:因中文字符不属于w,相邻汉字间无w/W类型变化,建议用(?<=s|^)xxx(?=s|$)模拟“中文词边界” - 在 raw string(
r'')中使用:避免反斜杠被 Python 字符串转义,如写成r'cat',而非'\bcat\b'
实用小技巧
结合 re.findall 或 re.sub 精准操作单词,避免误替换。
- 替换所有独立 "and" 为 "&":
re.sub(r'and', '&', text) - 提取所有纯英文单词(不含下划线和数字组合):
re.findall(r'[a-zA-Z]+', text) - 高亮代码中变量名(排除关键字)时,先用
定位,再用集合过滤保留字











