2

现在,我很困惑。

我在正则表达式备忘单中找到了这个

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

但是在“掌握正则表达式”一书中,它告诉我

\<    word boundary
\>    word boundary

\b正则表达式和正则表达式有什么区别\> \<

4

1 回答 1

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单词边界模式将返回两个零长度匹配,它们相当于单词的开头和结尾。这很有用,因为可以让您从字符串中挑选出单词。因此,匹配的字符串“foo bar”\b对于两个单词的 start-end-start-end 有四个空匹配项。

在此基础上,您可以看到这\<将为您提供单词开头的位置(2 个匹配 foo 的开头和 bar 的开头)和\>单词的结尾(两个匹配 foo 的结尾和酒吧结束)。

所以你可以等同\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 不支持\<and \>。这是一个为什么词边界有用的例子。我们可以挑选出整个单词的 BAR,而不是包裹在 foo 中的那个:

>>> re.compile(r'\bBAR\b').findall('foBARo BAR')
['BAR']
于 2014-12-31T15:40:15.597 回答