Замена текста сообщением об ошибке, если текст не найден в Matlab - PullRequest
0 голосов
/ 19 февраля 2019

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

Один из способов сделать это будет:

text_var = 'The whole big text';
if(~contains(text_var,'The part that will be replaced')))
     throw(MException('MF:error','The part to be replaced is not in the text!'))
else
     text_var = strrep(text_var,'The part that will be replaced','The replacement');
end

Однако это, похоже, неэффективно.Я могу принять текст, если он появится, только один раз.Но я бы хотел сделать один вызов функции, работающей на text_var.Нет ли в Matlab функции замены текста, которая возвращает ошибку, если замена не удалась?

1 Ответ

0 голосов
/ 19 февраля 2019

Вы можете выполнить замену и просто проверить, не изменилась ли длина новой строки (это предполагает, что исходная и замещающая строки имеют разную длину)

text_var = 'the whole big text';
n = numel( text_var );
text_var = strrep( text_var, 'replace me', 'with this' );
if numel( text_var ) == n
    error( 'No replacements made' );
end

Если вы не можете сделать это предположение, выможет использовать strfind, чтобы получить индексы строки.Это будет пустым, если не найден (так ошибка), или вы можете использовать его, чтобы вручную удалить строку.Особенно легко, поскольку вы утверждаете, что оно появится не более одного раза.

text_var = 'the whole big text';
removeStr = 'replace this';
k = strfind( text_var, removeStr );
if isempty( k )
    error( 'No replacements made' );
end
text_var( k:k+numel(removeStr)-1 ) = []; % Remove string

Поскольку вы подходите только один раз, вы можете обнаружить, что regexp быстрее, чем strfind, так какВы можете использовать 'once' аргумент regexp, чтобы остановить его при первом совпадении

k = regexp( text_var, removeStr, 'once' ); % instead of using strfind
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...