Как извлечь текст из списка, разделенного дефисом, с возможностью появления новых строк (таким образом, нескольких записей) внутри ячейки? - PullRequest
1 голос
/ 02 октября 2019

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

Я хочу разделить домашнюю и выездную команды на новые ячейки. Я мог бы сыграть домашнюю команду с:

=LEFT(B2, SEARCH("-",B2,1)-1)

Но это не учитывает новые линии в клетке.

Как я могу взять команду хозяев и гостей из клетки (включая записи, которые находятся на новой строке)?

demo: https://docs.google.com/spreadsheets/d/1GVnW6JQLNUuZaEDU9uRq2JezCM8-myKT064OlJk9kPU/edit?usp=sharing

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

образец формулы:

=ARRAYFORMULA( TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(FILTER(A2:A&char(10),A2:A<>""),,2^99),char(10))),"-")))

результат:

Sevilla     Sociedad
Leicester   Newcastle
Napoli      Brescia
Leicester   Newcastle
Leicester   Newcastle
Napoli      Brescia

каждая команда в отдельной ячейке


образец формулы #2:

=FILTER(REGEXEXTRACT(A2:A,REPT("([^-\n]*) [-v]s? ([^-\n]*)\n?",1+LEN(A2:A)-LEN(SUBSTITUTE(A2:A,char(10),)))),A2:A<>"")

результат:

Sevilla     Sociedad                
Leicester   Newcastle               
Napoli      Brescia     Leicester   Newcastle       
Leicester   Newcastle   Napoli      Brescia Espanyol    Valladolid
Napoli      Brescia     Leicester   Newcastle   

команд в соответствующих строках


пример формулы # 3

=FILTER(SPLIT(REGEXREPLACE(A2:A, REPT("([^-\n]*) [-v]s? ([^-\n]*)\n?",1+LEN(A2:A)-LEN(SUBSTITUTE(A2:A,char(10),))), VLOOKUP(1+LEN(A2:A)-LEN(SUBSTITUTE(A2:A,char(10),)),E2:F4,2,)),"-"),A2:A<>"")

enter image description here В формуле используется вспомогательная таблица:

1    $1-$2
2    $1
     $3-$2
     $4"
3    $1
     $3
     $5-$2
     $4
     $6

Эта вспомогательная таблица заменяет регулярное выражение: $1, $2, $3... - номера командвернуться.

1 голос
/ 02 октября 2019

Вы можете сделать это с помощью некоторого кода AppsScript, чтобы помочь вам!

Создайте новый файл AppsScript и вставьте этот код:

function splitTeams(cellData) {
  return cellData.split('-');
}
function hasOddIndex(item, index) {
  return index%2==0;
}
function hasEvenIndex(item, index) {
  return index%2!=0;
}

function getHomeTeams(cellData) {
  var homeTeams = [];
  homeTeams = splitTeams(cellData).filter(hasOddIndex);
  return homeTeams.join('\n');
}
function getAwayTeams(cellData) {
  var awayTeams = [];
  awayTeams = splitTeams(cellData).filter(hasEvenIndex);
  return awayTeams.join('\n');
}

Теперь вы можете использоватьв вашей таблице функции =getHomeTeams() и =getAwayTeam().

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...