2015-04-16 5 views
0

Я пытаюсь использовать REGEX в Google Таблицах для очистки данных формы, поступающих как данные с запятой с произвольными ведущими запятыми и одиночными пробелами.REGEXREPLACE в Google Spreadsheet

выборочные данные из формы:

,, Холодильник ,,,,, ,, Slide ,, Dual Slide ,, Микроволновая печь ,, Крытый душ, встроенный в Stereo, день/ночь переключатель ,, BluRay DVD/

Я хочу использовать

REGEXREPLACE(text, regular_expression, replacement) 

, чтобы удалить несколько запятые и одиночные пробелы, которые могут возникнуть между запятыми, заменяя с одной запятой, так что линия читает

Холодильник, Слайд, Двойной Слайд, СВЧ-печь,. , , и т.д.

матч строка (^,+|(,+ ,)|,+)works properly in the Rubular.com simulator, но при использовании в электронной таблице Google, как в примере с исходными данными выше вклеенными в ячейки M12 в качестве исходного текста:

REGEXREPLACE("M12","(^,+|(,+ ,)|,+)",",") 

это терпит неудачу, не удаляя один из ведущие запятые.

, Холодильник ,,,,, ,, Slide ,, Dual Slide ,, Микроволновая печь ,, Крытый душ, встроенный в Stereo, день/ночь переключатель ,, BluRay/DVD

Googlesheet Справка REGEX указывает на https://github.com/google/re2/blob/master/doc/syntax.txt, который, похоже, описывает операции так же, как и симулятор.

ответ

0

Из того, что вы описываете, Google работает должным образом, а другой связанный с ним сайт не является. Ваше регулярное выражение соответствует ^,+, среди прочего, (то есть одна или несколько запятых в начале) и заменяя их одной запятой. Если входная строка имеет запятую в начале, я бы ожидал, что на выходе тоже будет один.

Вы могли бы построить на том, что вы сделали с другим регулярным выражением заменить, и раздеть все ведущие запятые:

REGEXREPLACE(REGEXREPLACE(M12,"((,+ ,)|,+)",","), "^,+", "") 

Это использует ваш оригинал, минус ведущая запятые часть, чтобы сделать оригинальные замены, затем обертывает его во втором вызове, ища только ведущих запятых и заменяя их ничем.

Сказав это, ваше исходное регулярное выражение также не работает должным образом и не сбрасывает все запятые и пробелы до одной запятой при любых обстоятельствах. Вместо этого, вы можете использовать этот один:

REGEXREPLACE(REGEXREPLACE(M12,"(?(, *)+)",","), "^,+", "") 

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

+0

Возможно также '= REGEXREPLACE (M12, "(^ |,) [,] +", "$ 1")' – AdamL

+0

@AdamL да что будет работать для примера OP. Во время тестирования я закрывал дополнительные пробелы до/после значений, но тоже, хотя на всякий случай! –

+0

James, Adam: Большое спасибо за комментарии и подробное объяснение - пытаясь узнать некоторые новые трюки в возрасте 66 лет, но я люблю играть с бритвенными лезвиями. Приятно видеть, как профессиональные программисты думают выше очевидного. – axmc

0

Еще один хороший способ сделать это:

=TEXTJOIN(", ",1,SPLIT(A1,", "))