Сопоставлять запятые, исключая скобки - RE2 для Google Sheets - PullRequest
0 голосов
/ 28 ноября 2018

Хорошо, выслушай меня!Я видел десятки подобных вопросов о RegEx, но контекст - это все!Я пытаюсь включить поиск по регулярному выражению в функцию Google Sheets, которая будет сопоставлять все запятые из длинной строки, исключая запятые в скобках.Однако Google Sheets должен быть достаточно простым, но в нем используется RE2, который явно не любит обходных путей и часто выдает удручающую ошибку («значение параметра 2» независимо от того, что «не является допустимым регулярным выражением».).Итак, многие из подходов, которые я использовал, были неудачными.

Я должен отметить, что я ДОЛЖЕН использовать Google Sheets для этого процесса (согласно моему боссу), я загружаю данные непосредственно в Sheets из одного из наших API, и его структура внутри API не может измениться.Любые другие советы приветствуются!

Вот как выглядят данные:

Миндаль_111, Амарант_222, Анчоус_333, Яблоко (средний, органический) _444, Абрикос_5555, Артишок_6666

Мне нужночтобы сопоставить первичные запятые, чтобы я мог разделить их (или изменить их и разделить новым символом), сохраняя при этом данные вокруг вторичной запятой нетронутыми (т. е. «(средний, обычный)»).

Вот кое-что из того, что я пробовал до сих пор:

  • аккуратный обзор, который работает в regex101, но не в Sheets

    (?<=\d), 
    
  • Подробнеесложный обзор, который не работает в Sheets (или regex101 хе)

    ,(?=(((?!\]).)*\()|[^\[\)]*$)
    
  • Попытка захвата группы (также, я должен что-то упустить из-за захвата противКонцепция захвата группы ?? Поскольку группа без шапки все еще включена, когда я запускаю это ...)

    (?:\d)(,)
    
  • Соответствует правильно в regex101, но не в Sheets

    ,\s*(?![^()]*\))
    

Хорошо, это суть!Любая помощь будет оценена.Спасибо!

1 Ответ

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

Могучий костюм:

=regexreplace(substitute(A1,",","#"),regexextract(substitute(A1,",","#"),"\(.+\)"),regexextract(A1,"\((.+)\)"))

enter image description here

...