У меня есть список слов, и я хочу сопоставить любую комбинацию этих слов. Предположим, у меня есть слова apple
, orange
и mango
, и я работаю со следующей строкой:
This place has the best apple pie. They also have orange, apple and mango-apple smoothie ...
Регулярное выражение, которое у меня есть, это \b((apple|orange|mango)[\s-(,\s)]*)+
Он соответствует правильной комбинации слов, но, кроме того, соответствует дополнительному пробелу в конце последовательности. Спички, которые я получаю:
"apple "
"orange, apple "
"mango-apple "
Я знаю, почему это так. Как я могу изменить регулярное выражение, чтобы избавиться от последнего пробела в конце?
1 ответ
Добавление \b
в конце, кажется, сработало для меня. Кроме того, -
следует ставить последним в квадратных скобках. Итак, все, что вам нужно сделать, это изменить ваше регулярное выражение на это: \b((apple|orange|mango)[\s(,\s)-]*)+\b
РЕДАКТИРОВАТЬ:
Согласно вашему комментарию, я пробовал это: \b((apple|orange|mango)([\s,-]+(apple|orange|mango))*)+\b
. Проблема с вашим текущим регулярным выражением заключается в том, что вы также добавляете пробелы в конце, чтобы, например, вы могли сопоставить apple mango
.
Предлагаемое мной регулярное выражение должно соответствовать пробелам, тире или запятым тогда и только тогда, когда за ними следуют слова apple
, orange
или mango
.
Похожие вопросы
Связанные вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки строк, разбора и преобразования. Укажите язык (PHP, Python и т. д.) или инструмент (grep, VS Code, Google Analytics и т. д.), который вы используете. Не размещайте вопросы, требующие объяснения того, что означает символ или чему будет соответствовать конкретное регулярное выражение.