How to remove spaces and special characters from elements of a char array

char array names = ['time (s)', 'speed (%)',....]
I want to save the char array such that () and % characters are removed, meaning names = ['time_s', 'accel_pedal',...]

댓글 수: 5

Where is accel_pedal coming from? Do you mean speed_% ? Can you clarify what the logic is here?
Do you want to specifically remove only ( and ) and %, leaving in place anything like : or & ? Or do you have a specific set of characters you want to preserve with everything else to be changed or discarded?
If the input were 'time (s)' would you want the output to be 'time__s' or 'time_s' ?
I'm sure you've tried strrep(), but what was wrong with that? And do you want to replace all "special" characters with underlines, like
str = strrep(str, '%', '_');
I have a 640 elements long char array with three set of characters %, (, ) and spaces which I want to replace with '_'. I am using matlab 2014a which does not have the strrep function in it.
Yes you do. It was introduced before R2006a.

댓글을 달려면 로그인하십시오.

 채택된 답변

str = regexp( names, '[%() ]', '_');
But more likely you want
str = regexp(names, {'[%() ]+', '_+$'}, {'_', ''});
But it is a bit confusing what you are asking, especially since you are using a version before the string() data type. The notation
['time (s)', 'speed (%)',....]
would create a single character vector that started with
'time (s)speed (%)'
and once that was constructed there would be no way of knowing where the original breaks between the elements had been -- not unless we could count on each entry ending in ')' . If we can count on that, then would the desired output be
'time_s speed'
?
I am uncertain as to your actual input is something like,
names = ['time (s) ';
'speed (%)']
so a char array with 640 rows and blank padding to make the rows all the same size? If so then preserving the char array nature would be slightly awkward, and would raise the question of whether the new char array should be the same size as the input or should instead only have as many columns as needed to represent the widest entry excluding trailing blanks.
Or perhaps what you have is a cell array of character vectors,
names = {'time (s)', 'speed (%)',....};
If so then the two regexp() I posted above will work.

댓글 수: 2

Thanks a lot for the answers walter. And you are right names = {'time (s)'; 'speed (%)';...}. However when i tried using two regexp() i got an error saying 'The 'STRING' input must be a one-dimensional array of char or cell arrays of strings.'
str = regexprep(names, {'[%() ]+', '_+$'}, {'_', ''});

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Characters and Strings에 대해 자세히 알아보기

제품

릴리스

R2014a

질문:

2018년 8월 17일

댓글:

2018년 8월 18일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by