Самый простой способ выяснить, соответствует ли хотя бы одна ячейка в массиве ячеек регулярному выражению

Мне нужно найти массив ячеек и вернуть единственное логическое значение, указывающее, соответствует ли какая-либо ячейка регулярному выражению.

Например, предположим, я хочу выяснить, является ли массив ячеек 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'))

И это позволяет использовать strfindlower) вместо regexpi:

~isempty(strfind(lower([strs{:}]),'foo'))
Другие вопросы по тегам