Рабочая строка в MATLAB - PullRequest
       3

Рабочая строка в MATLAB

2 голосов
/ 28 апреля 2011

У меня есть следующая строка в MATLAB, например

@ # %% F1_USA (40) _u

, и я хочу

F1_USA_40__u

Есть ли для этого какая-либо функция?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

Ваша лучшая ставка, вероятно, regexprep, которая позволяет заменять части строки с помощью регулярных выражений:

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

Обновление : основываясь на вашем обновленном комментарии, это, вероятно, то, что вы хотите:

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

или

s_new = regexprep(regexprep(s, '[^A-Za-z0-9_]', '_'), '^_*', '')
1 голос
/ 28 апреля 2011

Один из способов сделать это - использовать функцию ISSTRPROP , чтобы найти индексы буквенно-цифровых символов и соответственно заменить или удалить остальные:

>> 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

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

str = regexprep(str,{'\W','^_*'},{'_',''});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...