Поиск массива ячеек с помощью регулярных выражений

Я часто пытаюсь искать в массивах ячеек, как если бы я искал в базе данных запрос 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);
Другие вопросы по тегам