Arhn - архитектура программирования

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

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

Например, предположим, что я хочу узнать, содержит ли массив ячеек strs foo или -foo (без учета регистра). Регулярное выражение, которое мне нужно передать в regexpi, это ^-?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$'))))

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

25.10.2013

  • Я не считаю это загадочным. Если вы понимаете, что делают isempty, find и cellfun, это довольно очевидно. 25.10.2013
  • Вы можете избежать find, например: any(~cellfun('isempty', regexpi(strs, '-?foo'))) 25.10.2013

Ответы:


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'))
25.10.2013
  • Я забыл о any! Я подумал, что должно быть что-то хотя бы немного проще, чем обернуть все это в ~isempty(find()). Спасибо. К сожалению, я думаю, что я облажался, и мое регулярное выражение должно было быть ^-?foo$, поэтому конкатенация не будет работать в моем случае... но, возможно, это будет полезно для кого-то еще. Еще раз спасибо за быстрый и исчерпывающий ответ. 25.10.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..