В электронной таблице Документов Google, как мне индексировать в массив, возвращаемый REGEXEXTRACT

Я пытаюсь проиндексировать результаты REGEXEXTRACT, чтобы извлечь определенные части текстовой строки, которая является путем. Как мне получить доступ к конкретным совпадениям.

  A1                                          A2
  ------------------------------------        -----------
  =REGEXEXTRACT($B$2,"/[A-Za-z_-]+/")         /a/b/c/d.txt

Приведенная выше формула помещает первое значение массива «/ a /» в ячейку A1, как мне получить доступ к 4-му или последнему значению в массиве?


person derickson    schedule 05.10.2012    source источник


Ответы (1)


Если вы настаиваете на использовании REGEXTRACT(), чтобы сломать свой путь, вам могут быть полезны следующие ресурсы:

Однако в электронной таблице Google наиболее эффективным способом доступа к определенным частям строки пути и имени файла является использование настраиваемой функции во встроенном скрипте. Я предполагаю, что вы знакомы с программированием приложений-скриптов; см. Создание своего первого сценария.

Следующий код содержит два сценария, один из которых построен на другом. Например, вызов pathExtract() вернет указанный сегмент заданной строки пути.

/**
 * Split path into parts, return in array. If path started
 * at 'root', first part will be "/". This function may be used
 * as a custom function in Google Spreadsheets.
 *
 * @var {string} path   The search path, e.g. "/a/b/c/d.txt"
 * @return {array}      Result of splitting path at "/". 
 */
function pathSplit( path ) {
  var arr = path.split('/');
  if (path[0] === "/") {
    arr[0] = "/";
  }
  return ( arr );
}

/*
 * Get a portion of a path string. To match INDEX() function,
 * the parameter index is 1-based. Requesting index 0 will
 * result in the last element from the string. This function
 * may be used as a custom function in Google Spreadsheets.
 *
 * @var {string} path   The search path, e.g. "/a/b/c/d.txt".
 * @var {number} index  1-n, the element to extract. 0 for last.
 * @return {string}     Element [index] from path, or *ERROR*.
 */
function pathExtract( path, index ) {
  var result = "*ERROR*";
  var pathArray = pathSplit( path );
  if (index >= 1 && index <= pathArray.length) {
    result = pathArray[index-1];
  }
  if (index === 0) {
    result = pathArray[pathArray.length-1];
  }

  return ( result );
}

Вот несколько примеров того, что вы можете делать с этими сценариями, добавленными в вашу электронную таблицу: Показанные формулы

Результаты показаны

person Mogsdad    schedule 11.01.2013