Matlab - 如何替换向量中的所有特殊字符?

7 regex matlab vector

是否可以通过正则表达式替换matlab向量中的所有特殊字符?

谢谢

*编辑:*

谢谢你的回复.我正在努力实现以下目标.我有一个文本文件,其中包含小说中的几个段落.我已将此文件读入矢量.

fileText = ['Token1,''token_2''标记%!3']等

在这种情况下 , _ % !是特殊字符,我想用空格('')替换它们.这可以通过正则表达式实现吗?我可以用javascript做到这一点,但不能让它在Matlab中工作.

谢谢

gno*_*ice 22

如果通过"特殊字符"表示不太常用的Unicode字符,如¥,,则可以使用函数REGEXPREP或设置比较函数(如ISMEMBER)(您可以首先使用函数将字符串转换为其等效的整数代码)如果需要可以加倍).以下是一些示例,其中除了标准英文字母字符(大写和小写)之外的所有字符都从字符串中删除:

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
Run Code Online (Sandbox Code Playgroud)

上面的所有选项都会产生相同的结果:

str =

ABCDEFabcdef
Run Code Online (Sandbox Code Playgroud)


编辑:

为了应对在更新的问题的具体例子,这里是你如何使用REGEXPREP更换所有字符都没有 ¼,a-zA-Z用空格:

str = regexprep(str,'[^a-zA-Z0-9]','');
Run Code Online (Sandbox Code Playgroud)

这可能比尝试编写正则表达式以匹配每个"特殊"字符更容易,因为可能存在许多这些字符.但是,如果你一定是唯一的特殊字符会0-9,_%,这应该实现与上述相同:

str = regexprep(str,'[_%!]','');
Run Code Online (Sandbox Code Playgroud)

此外,正如Amro的评论中所提到的,您还可以使用函数ISSTRPROP将所有非字母数字字符替换为空格,如下所示:

str(~isstrprop(str,'alphanum')) = '';
Run Code Online (Sandbox Code Playgroud)

  • +1.请注意,65:122包含非字母字符,如[\]`.(执行"disp(char(65:122))"确认.)无需转换为double:如果两个输入都是字符而不是单元格,则ismember()按字符运算.所以"ismember(str,['A':'Z'''':'z'])"也适用,IMO比使用数字字符代码更具可读性. (2认同)