Matlab - как заменить все специальные символы в векторе? - PullRequest
7 голосов
/ 07 октября 2010

Можно ли заменить все специальные символы в векторе matlab регулярным выражением?

Спасибо

* РЕДАКТИРОВАТЬ: *

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

fileText = ['Token1,' 'token_2' 'token%! 3'] и т.д.

В этом случае _%! являются специальными символами, и я хотел бы заменить их пробелами (''). Может ли это быть достигнуто с помощью регулярных выражений? Я могу сделать это с помощью JavaScript, но не могу заставить его работать в Matlab.

Спасибо

1 Ответ

22 голосов
/ 07 октября 2010

Если под «специальными символами» вы подразумеваете менее часто используемые Unicode символы, такие как ¥, или ¼, то вы можете использовать любую функцию REGEXPREP или установите функции сравнения, такие как ISMEMBER (и вы можете сначала преобразовать строку символов в ее эквивалентный целочисленный код, используя функцию DOUBLE , если необходимо). Вот пара примеров, где все, кроме стандартных символов английского алфавита (строчные и прописные) удаляются из строки:

str = ['ABCDEFabcdefÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐ'];   %# A sample string
str = regexprep(str,'[^a-zA-Z]','');      %# Remove characters using regexprep
str(~ismember(str,['A':'Z' 'a':'z'])) = '';  %# Remove characters using ismember
                                             %#   (as suggested by Andrew)
str(~ismember(double(str),[65:90 97:122])) = '';  %# Remove characters based on
                                                  %#   their integer code

Все вышеперечисленные параметры дают одинаковый результат:

str =

ABCDEFabcdef


EDIT:

В ответ на конкретный пример в обновленном вопросе, вот как вы можете использовать REGEXPREP для замены всех символов, которые не a-z, A-Z или 0-9 с пробелами:

str = regexprep(str,'[^a-zA-Z0-9]','');

Это может быть проще, чем пытаться написать регулярное выражение для соответствия каждому отдельному «специальному» символу, поскольку потенциально их может быть много. Однако, если вы были уверены , что единственными специальными символами будут _, % и !, это должно достигнуть того же, что и выше:

str = regexprep(str,'[_%!]','');

Также, как упоминалось в комментарии Amro , вы также можете использовать функцию ISSTRPROP для замены всех не алфавитно-цифровых символов пробелами, например:

str(~isstrprop(str,'alphanum')) = '';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...