Фильтрация строк из массива строк в Matlab с использованием regexp

Есть ли эквивалентная функция strmatch, которая возвращает числовой индекс всех элементов массива, которые начинаются с указанного регулярного выражения (вместо строки?

Предпосылки: У меня есть массив строк, называемый strarray . Я хочу отфильтровать все строки, у которых нет специального strprefix . Следующий код, который ищет индексы массива строк ( strmatch func ), для которого существует определенный префикс, а затем строит новый массив из строк, содержащих префикс:

indexes = [];
n = strmatch(strprefix, strarray);
indexes = [indexes,n];
indexes = sort(indexes);
newarray = strarray(indexes);

Он работает нормально, однако префикс является строкой, и я хотел бы использовать определенное регулярное выражение вместо этого.

Или, может быть, есть более простой способ (один лайнер?) для выполнения такой задачи?


Обновить

Я знаю о функции regexp. Я пытаюсь отфильтровать строки из массива строк, но я изо всех сил стараюсь сделать это за один или два шага. Мой текущий код для этого (не уверен, что это правильный способ кодирования Matlab).

  • Step 1. Empty the string with no prefix: regexp(strarray,[prefix,'.*'],'match','once');
  • Step 2. Get index of empty lines emptyCells = cellfun(@isempty,array);
  • Step 3. Remove the empty rows array(emptyCells) = [];
0
nl ja de

2 ответы

Функция REGEXP позволяет вам сопоставлять строки с использованием регулярных выражений.

Если вам нужна помощь в создании или применении вашего обычного выражения, вы можете отправить дополнительную информацию.

1
добавлено

Вы действительно решили свою проблему самостоятельно, но вот как вы будете делать все, что вы говорите, в одной (длинной) линии. Примечание. Я предполагаю, что строка prefix начинается с ^ , поэтому она правильно соответствует «началу строки» (если это действительно то, что вы хотите сделать). Другой вопрос - если все строки в strarray не имеют одинаковой длины, вы действительно должны использовать массив ячеек. В этом случае ваш шаг 3 не удаляет строку, она просто устанавливает ее в [] . Поэтому я предлагаю изменить логику, чтобы вы «включили все хорошие строки» в свой вывод, а не удаляли плохие. Это заставляет его выглядеть так:

strippedArray = strarray(~cellfun('isempty',regexp(strarray,[prefix,'.*'],'match','once')));

Это сработало для меня ...

1
добавлено