我正在阅读一本关于正则表达式的书,我在\b
发现了这个例子:
猫把食物散落在整个房间里。
使用正则表达式 - \bcat\b
将匹配单词cat
,但不匹配cat
中的scattered
。
对于\B
,作者使用以下示例:
请输入九位数ID
出现在您的颜色编码密钥上。
在单词\B-\B
之间使用正则表达式-
匹配color - coded
。另一方面,使用\b-\b
会与-
和nine-digit
中的pass-key
相匹配。
在第一个示例中,我们使用\b
分隔cat
,第二个使用\B
分隔-
?在第二个示例中使用\b
与之前的操作相反。
请向我解释一下这个区别。
编辑:此外,有人可以用一个新的例子来解释吗?
答案 0 :(得分:71)
混淆源于你的想法\b
匹配空格(可能因为“b”暗示“空白”)。
\b
匹配开头或结尾的空字符串。 \B
匹配不在单词开头或结尾的空字符串。这里的关键是“ - ”不是单词的一部分。因此<left>-<right>
与\b-\b
匹配,因为-
的任意一侧都有字边界。另一方面,对于<left> - <right>
(注意空格),短划线两侧没有单词边界。单词边界是左右一个空格。
另一方面,当搜索\bcat\b
单词边界时,行为更直观,并且符合预期的“cat”。
答案 1 :(得分:51)
\b
是零宽度字边界。具体做法是:
在单词字符(与\ w匹配的任何内容)和非单词字符(由[^ \ w]或\ W匹配的任何内容)之间以及字符串的开头和/或结尾处的位置匹配如果字符串中的第一个和/或最后一个字符是单词字符。
示例:.\b
与c
abc
匹配
\B
是零宽度非字边界。具体做法是:
匹配两个单词字符之间的位置(即\ w \ w之间的位置)以及两个非单词字符之间的位置(即\ W \ W)。
示例:\B.\B
与b
abc
匹配
有关更多优秀的正则表达式信息,请参阅regular-expressions.info
答案 2 :(得分:7)
元字符\ b是一个像插入符和美元符号的锚。它匹配一个称为“单词边界”的位置。这个匹配是零长度。
有三种不同的职位符合词边界:
\ B是\ b 的否定版本。 \ B匹配\ b不匹配的每个位置。实际上,\ B匹配两个单词字符之间的任何位置以及两个非单词字符之间的任何位置。
答案 3 :(得分:3)
\b
匹配字边界。 \B
与非字边界匹配,相当于 [^\b]
(?!\b)
(感谢@Alan Moore进行更正!)功能 子>。两者都是零宽度。
有关详细信息,请参阅http://www.regular-expressions.info/wordboundaries.html。该网站对许多基本的正则表达式问题非常有用。
答案 4 :(得分:2)
\ b用作单词边界
word = "categorical cat"
找到以上单词中的所有“猫”
没有\ b
re.findall(r'cat',word)
['cat', 'cat']
与\ b
re.findall(r'\bcat\b',word)
['cat']
答案 5 :(得分:0)
\B
不 \b
,例如否定 \b
pass-key
此处-
旁边没有单词边界,因此它与您的第一个示例中的\B
匹配,在cat旁边有单词边界,因此它匹配\b
类似的规则也适用于其他人。 \W
为\w
,\UPPER CASE
为负,\LOWER CASE
答案 6 :(得分:0)
设一个字符串:
XIX IXI XX X I II IIXX XXII I-I X-X -X X-X-I I-X -X- -I-X -X-I I-X-X-I-X_X _X-
注意:在这种情况下,下划线(_)不被视为特殊字符。
/\bX\b/g
应以特殊字符或空格开头和结尾XIX IXI XX X I II IIXX XXII II X - X - X X < / strong> - X -I I- X - X - -I- X - X - 我 - X - X -I- X_X _X-
/\bX/g
应以特殊字符或空格开头X IX IXI X X X I II IIXX X XII II X - X - X X - X -I I- X - < strong> X - -I- X - X -I I- X - X - I- X _X _X-
/X\b/g
应以特殊字符或空格结尾XI X IXI X X X I II IIX X XXII II X - X - X X - X -I I- X - < strong> X - -I- X - X -I I- X - X - I- X_ X _ X -
/\BX\B/g
如果不开始且不以特殊字符或空格结尾I X I XX XI II II X XX X II II XX -X X-XI IX -X- -IX - XI IX-XI-X_X _X-
/\BX/g
不应该以特殊字符或空格开头XI X I X IX X XI II II XX X X II II XX -X X-XI IX -X- -IX -XI IX-XI-X_ X _ X -
/X\B/g
不以特殊字符或空格结尾X IX I X I X XXI II II X X XX II II XX -X X-XI IX -X- -IX -XI IX-XI- X _X _X-
/\bX\B/g
应该开始且不以特殊字符或空格结尾X IX IXI X XXI II II X X X XII II XX -X X-XI IX -X- -IX -XI IX-XI- X _X _X-
/\BX\b/g
不应该开始,应该以特殊字符或空格结尾XI X IXI X X XI II IIX X XXII II XX -X X-XI IX -X- -IX -XI IX - XI-X_ X _ X -
答案 7 :(得分:0)
Source©版权所有RexEgg.com
单词边界:\ b *
单词边界\ b匹配位置,其中一侧是单词字符(通常是字母,数字或下划线,但请参见下文,了解各个引擎之间的差异),而另一侧不是单词字符(例如,可能是字符串的开头或空格字符。
因此,正则表达式\ bcat \ b会与黑猫中的cat相匹配,但与catatonic,tomcat或证书中的相匹配。除去其中一个边界,\ bcat将匹配fish鱼中的cat,而cat \ b将匹配tomcat中的cat,但反之则不然。当然,两者都会单独匹配cat。
非单词边界:\ B
\ B匹配\ b不匹配的所有位置。因此,它匹配:
✽当双方都不是单词字符时,例如在字符串$ =(@-%++)中的任何位置(包括字符串的开头和结尾)
✽当双方都是文字字符时,例如在H和i之间在Hi中!
这似乎不太有用,但是有时\ B就是您想要的。例如,
✽\ Bcat \ B会发现猫完全被单词字符包围,就像在证书中一样,但不能单独出现,也不能位于单词的开头或结尾。
✽cat \ B可以在证书和cat鱼中找到猫,但是在tomcat中都不会找到猫。
✽\ Bcat会在证书和tomcat中都找到猫,但是在cat鱼中或单独都不会找到猫。
✽\ Bcat | cat \ B将在嵌入式情况下找到cat,例如证书,cat鱼或tomcat,但不能单独使用。