2013-09-01 2 views
1

Так сказать, у меня есть строка с некоторыми подчеркиваниями, такими как hi_there.Преобразование подчеркивания в пробелы в строке Matlab?

Есть ли способ автоматически преобразовать эту строку в «привет там»?

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

ответ

5

Удивительно, что никто до сих пор не упоминается strrep:

>> strrep('string_with_underscores', '_', ' ') 
ans = 
string with underscores 

, который должен быть official way сделать простую строку замены. Для такого простого случая regexprep является излишним: да, это швейцарские ножи, которые могут делать все возможное, но приходят с длинным руководством. Строка индексации показано AndreasH работает только для замены одного символа, он не может этого сделать:

>> s = 'string*-*with*-*funny*-*separators'; 
>> strrep(s, '*-*', ' ') 
ans = 
string with funny separators 

>> s(s=='*-*') = ' ' 
Error using == 
Matrix dimensions must agree. 

В качестве бонуса, он также работает для сотовых массивов со строками:

>> strrep({'This_is_a','cell_array_with','strings_with','underscores'},'_',' ') 
ans = 
    'This is a' 'cell array with' 'strings with' 'underscores' 
+0

'strrep' также намного быстрее, чем' regexprep'. – horchler

5

Тест Matlab код для строки переменной «s»

s(s=='_') = ' '; 
1

В строках Matlab являются векторы, таким образом выполняя простые манипуляции строки могут быть достигнуты с использованием стандартных операторов, например, заменяя _ пробелом.

text = 'variable_name'; 
text(text=='_') = ' '; //replace all occurrences of underscore with whitespace 
=> text = variable name 
+1

Это не работает в Matlab (может быть, Octave) из-за двойных кавычек –

+0

My bad. Да, я использую Octave :) – GordyD

2

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

s(s == '_') = ' ' будет огромная боль. Если замена потребности постоянно усложняются рассмотреть вопрос об использовании regexprep:.

>> regexprep({'hi_there', 'hey_there'}, '_', ' ') 
ans = 
    'hi there' 'hey there' 

Это, как говорится, в вашем случае @ решения AndreasH является наиболее подходящим и regexprep является излишеством.

Более интересный вопрос - почему вы передаете переменные вокруг как строки?

2

regexprep() может быть тем, что вы ищете, и является удобной функцией в целом.

regexprep('hi_there','_',' ') 

Возьмем первую строку аргумента и заменим экземпляры второго аргумента на третий. В этом случае он заменяет все символы подчеркивания пробелом.

Смежные вопросы