Mokus
Mokus

Reputation: 10400

Working string in MATLAB

I have the following string in MATLAB, for example

@#%%F1_USA(40)_u

and I want

F1_USA_40__u

Does it has any function for this?

Upvotes: 2

Views: 1442

Answers (2)

gnovice
gnovice

Reputation: 125854

One way to do this is to use the function ISSTRPROP to find the indices of alphanumeric characters and replace or remove the others accordingly:

>> str = '@#%%F1_USA(40)_u';           %# Sample string
>> index = isstrprop(str,'alphanum');  %# Find indices of alphanumeric characters
>> str(~index) = '_';                  %# Set non-alphanumeric characters to '_'
>> str = str(find(index,1):end)        %# Remove any leading '_'

str =

F1_USA_40__u                           %# Result

If you want to use regular expressions (which can get a little more complicated) then the last suggestion from Tamas will work. However, it can be greatly simplified to the following:

str = regexprep(str,{'\W','^_*'},{'_',''});

Upvotes: 1

Tamás
Tamás

Reputation: 48061

Your best bet is probably regexprep which allows you to replace parts of a string using regular expressions:

s_new = regexprep(regexprep(s, '[()]', '_'), '[^A-Za-z0-9_]', '')

Update: based on your updated comment, this is probably what you want:

s_new = regexprep(regexprep(s, '^[^A-Za-z0-9_]*', ''), '[^A-Za-z0-9_]', '')

or:

s_new = regexprep(regexprep(s, '[^A-Za-z0-9_]', '_'), '^_*', '')

Upvotes: 2

Related Questions