Самый простой способ выяснить, соответствует ли хотя бы одна ячейка в массиве ячеек регулярному выражению
Мне нужно найти массив ячеек и вернуть единственное логическое значение, указывающее, соответствует ли какая-либо ячейка регулярному выражению.
Например, предположим, я хочу выяснить, является ли массив ячеек strs
содержит foo
или же -foo
(без учета регистра). Регулярное выражение, которое мне нужно передать в регулярное выражение: ^-?foo$
,
Примеры входных данных:
strs={'a','b'}
% результат равен 0
strs={'a','foo'}
% результат равен 1
strs={'a','-FOO'}
% результат равен 1
strs={'a','food'}
% результат равен 0
Я придумал следующее решение, основанное на том, как я могу реализовать подстановочный знак в функции ismember в matlab? и Поиск массива ячеек с помощью регулярных выражений, но, похоже, я должен быть в состоянии упростить его:
~isempty(find(~cellfun('isempty', regexpi(strs, '^-?foo$'))))
У меня проблема в том, что для такой простой операции это выглядит довольно загадочно. Есть ли более простое, более понятное человеку выражение, которое я могу использовать для достижения того же результата?
1 ответ
ПРИМЕЧАНИЕ. Ответ относится к исходному регулярному выражению в вопросе: '-?foo'
Вы можете избежать find
:
any(~cellfun('isempty', regexpi(strs, '-?foo')))
Другая возможность: объединить сначала все ячейки в одну строку:
~isempty(regexpi([strs{:}], '-?foo'))
Обратите внимание, что вы можете удалить знак "-" в любом из вышеперечисленных:
any(~cellfun('isempty', regexpi(strs, 'foo')))
~isempty(regexpi([strs{:}], 'foo'))
И это позволяет использовать strfind
(с lower
) вместо regexpi
:
~isempty(strfind(lower([strs{:}]),'foo'))