Поиск буквенных строк, содержащий символы - PullRequest
0 голосов
/ 21 ноября 2018

В рамках показа я пытаюсь найти содержимое ячейки, которое может содержать {}.Это также должно быть ограничено для точного соответствия в пределах диапазона.Итак, моя первая догадка - пойти на regexmatch, но у меня возникли проблемы с тем, что {} станет частью регулярного выражения.Мне в основном нужен способ избежать всей строки из клетки.Вот что я пробовал в качестве примера:

REGEXMATCH(A2,"(?:^|\s)("&A1&")(?:\s)")

Так сказать, A1 это blue{car}, а A2 это like a blue{car}, это должно совпадать.Однако, я просто получаю ошибку #REF!, когда пытаюсь использовать {} в качестве квантификатора.Я знаю, что вы можете экранировать символы в заранее определенной строке, но поскольку A1 может быть чем угодно, мне нужен общий подход.Кажется, что \Q…\E обернутый вокруг "&A1&" будет идеальным, но, к сожалению, он не поддерживается в листах.

Любая помощь с этим с благодарностью получена!

1 Ответ

0 голосов
/ 21 ноября 2018

На основании Какие специальные символы должны быть экранированы в регулярных выражениях? и Ссылка RE2 , вы можете легко написать функцию, которая будет экранировать все специальные символы, которые должны рассматриваться как буквенные символы вшаблон регулярного выражения:

=REGEXREPLACE(A1, "[.^$*+?()[{\\|]", "\\$0")

Для {car} он даст \{car} и будет соответствовать только {car}.Обратите внимание, что механизм регулярных выражений RE2 достаточно умен, чтобы разбирать скобки в {car} как буквальные скобки.Единственная проблема с неэкранированным { появится, если содержимое между фигурными скобками является числовым и расположено после не поддающегося количественному определению шаблона, скажем, в начале строки или после оператора чередования.

В вашем регулярном выражении есть еще одна проблема: вам требуется пробел или начало строки до {car} и пробел после {car}, но blue{car} не имеет пробелов с обеих сторон и не находится в начале строки.Пожалуйста, пересмотрите ваши требования и внесите соответствующие изменения в шаблон.

...