Как исправить регулярное выражение, чтобы соответствовать целое слово, а не подстрока? - PullRequest
0 голосов
/ 14 января 2020

Мне не удалось исправить это регулярное выражение: B..y

В настоящее время я ищу текстовый файл, выводится следующее: Baby Babylon Babyland eBaby

Что я должен изменить в выражении, чтобы выводить только «Baby» и исключать остальные три?

РЕДАКТИРОВАТЬ: Что если у меня есть еще одна запись - «Blay»? Мне нужно получить «Детка» и «Блей».

Ответы [ 2 ]

2 голосов
/ 14 января 2020

В дополнение к ответу virolino :

Регулярное выражение Метасимвол \b соответствует границам слов, то есть между двумя символами, где один является символом слова а другой не является символом слова, плюс начало и конец строки, если первый символ (или последний соответственно) является символом слова.

Символ слова соответствует классу символов \w - похоже, нет реального согласия относительно что такое символ слова на самом деле, но [A-Za-z0-9_] кажется минимальным, поэтому ваш пример должен работать с шаблоном virolinos (\bBaby\b) в любом случае.

Кроме того, шаблон соответствует следующим строкам

Baby-Boomer
Baby.Feed(); 

См. мой форк virolinos тест регулярных выражений .

1 голос
/ 14 января 2020

Регулярное выражение:

\bBaby\b

Тест здесь .


Чтобы найти «Baby» и «Blay», вам нужно обновить регулярное выражение:

\b(Baby|Blay)\b

Тест здесь .


Пояснения:

С здесь о \ b :

Метасимвол \ b является якорем, подобным каретке и знаку доллара. Он соответствует позиции, которая называется «граница слова». Это совпадение имеет нулевую длину.

Существует три различных положения, которые квалифицируются как границы слов:

  • Перед первым символом в строке, если первый символ является символом слова.
  • После последнего символа в строке, если последний символ является символом слова.
  • Между двумя символами в строке, где один является символом слова, а другой - не символом слова .

Проще говоря: \ b позволяет выполнять поиск «только целых слов» с использованием регулярного выражения в форме \ bword \ b. «Символ слова» - это символ, который может использоваться для формирования слов. Все символы, которые не являются «символами слова», являются «несловными символами».

С здесь о (Baby | Blay) :

Если вы хотите искать буквальный текст cat или dog, разделите оба параметра вертикальной чертой или символом трубы: cat | dog. Если вам нужны дополнительные параметры, просто раскройте список: cat | dog | mouse | fi sh.

Оператор чередования имеет самый низкий приоритет среди всех операторов регулярных выражений. То есть, он сообщает механизму регулярных выражений, что нужно сопоставить либо все слева от вертикальной черты, либо все правее вертикальной черты. Если вы хотите ограничить охват чередования, вам нужно использовать скобки для группировки. Если мы хотим улучшить первый пример, чтобы он соответствовал только целым словам, нам нужно использовать \ b (cat | dog) \ b . Это говорит механизму регулярных выражений, что нужно найти границу слова, затем кошку или собаку, а затем еще одну границу слова. Если бы мы пропустили круглые скобки, то механизм регулярных выражений искал бы границу слова, за которой следовала бы кошка или собака, за которой следовала бы граница слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...