В чем разница между \b и \>, \ <в регулярных выражениях?

Теперь я в замешательстве.

Я нашел это в шпаргалке регулярных выражений

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

Но в книге "Освоение регулярного выражения" мне сказали, что

\<    word boundary
\>    word boundary

В чем разница между \b а также \>\< в регулярных выражениях?

1 ответ

Решение

Резюме

\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

Если у вас есть слово, как "Боб", то \b шаблон границы слова вернет два совпадения нулевой длины, которые эквивалентны началу и концу слова. Это полезно, потому что позволяет выбирать слова в строках. Таким образом, строка "Foo Bar" соответствует \b имеет четыре пустых совпадения для начала-конца-начала-конца двух слов.

Опираясь на это, вы можете увидеть, что \< даст вам позиции только начала слов (2 совпадения для начала foo и начала бара) и \> Концы слов (два совпадения для конца 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 не поддерживает \< а также \>, И вот пример того, почему границы слов полезны. Мы можем выбрать BAR, который является целым словом, а не тем, что заключен в foo:

>>> re.compile(r'\bBAR\b').findall('foBARo BAR')
['BAR']
Другие вопросы по тегам