В чем разница между \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']