现在,我很困惑。
我在正则表达式备忘单中发现了这个
\b word boundary \< start of word \> end of word
但在&#34;掌握正则表达式&#34;书,它告诉我,
\< word boundary \> word boundary
正则表达式中\b
和\>
\<
之间的区别是什么?
答案 0 :(得分:3)
<强>摘要强>
\b word boundary \< word boundary; specifically, word boundary followed by a word; ie, start of word \> word boundary; specifically, word followed by word boundary; ie, end of word
如果你有一个像“bob”这样的单词,那么\b
单词边界模式将返回两个零长度匹配,相当于单词的开头和结尾。这很有用,因为您可以在字符串中选择单词。因此,与\b
匹配的字符串“foo bar”对于两个单词的起始 - 开始 - 结尾有四个空匹配。
在此基础上,您可以看到\<
将为您提供单词开头的位置(foo开头和条形开头的2个匹配)和\>
单词的结尾(foo结尾的两个匹配和bar的结尾)。
因此,您可以将\b
等同于\<
,如下所示:
\<
is equivalent to
start-of-word
is equivalent to
word-boundary-followed-by-word
is equivalent to
\b(?=\w)
我认为你的“掌握正则表达式”一书有点模糊,并且将\<
和\>
描述为字边界,当它应该更精确并将它们区分为“字边界”时(特别是对于单词的开头)“和”单词边界(特别是单词的结尾)“。
Python示例:
>>> re.compile(r'\b').findall('foo bar')
['', '', '', '']
>>> re.compile(r'\b(?=\w)').findall('foo bar')
['', '']
请注意,python不支持\<
和\>
。这是一个为什么单词边界有用的例子。我们可以选出整个单词的BAR,而不是foo中包含的那个:
>>> re.compile(r'\bBAR\b').findall('foBARo BAR')
['BAR']