Поиск массива ячеек с помощью регулярных выражений
Я часто пытаюсь искать в массивах ячеек, как если бы я искал в базе данных запрос SQL. В этом случае у меня есть ряд военных баз (base.shp)
bases = shaperead('us-military-bases.shp')
а затем я хочу отфильтровать файл формы, чтобы получить базы ВВС, что-то вроде regexp({bases.FAC_NAME}','Air Force')
, Но вывод, который я получаю, довольно громоздок:
[]
[]
[ 4]
[]
[]
[ 9]
[]
Я уверен, что фильтрация массивов ячеек или шейп-файлов довольно распространена, и должны быть некоторые хорошие практики. Спасибо за понимание.
Я также пробую такие вещи, как:
trif = arrayfun(@(x)regexp(x.FAC_NAME,'Griff','match'),af_bases)
1 ответ
Учитывая выход regexp
Вы можете индексировать обратно в исходный массив ячеек, просто проверив, пуст ли каждый элемент в результирующем массиве ячеек. Вы можете сделать это используя cellfun
применить функцию к каждой ячейке.
Чтобы получить массив логики, для непустых элементов вы можете сделать:
base_strings = {bases.FAC_NAME}';
ind = ~cellfun(@isempty, regexp(base_strings, 'Air Force'))
Или более аккуратно, используя анонимную функцию:
ind = cellfun(@(x)( ~isempty(x) ), regexp(base_strings, 'Air Force'))
Затем отфильтровать:
filtered = base_strings(ind);