\ b和\>,\<之间有什么区别?在正则表达式?

时间:2014-12-31 15:23:42

标签: regex word-boundary

现在,我很困惑。

我在正则表达式备忘单中发现了这个

\b    word boundary
\<    start of word
\>    end of word

但在&#34;掌握正则表达式&#34;书,它告诉我,

\<    word boundary
\>    word boundary

正则表达式中\b\> \<之间的区别是什么?

1 个答案:

答案 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']