poster
2019-12-10, 20:48
是否可以通过正则表达式替换matlab向量中的所有特殊字符?
谢谢
* 编辑:*
谢谢你的回复。我正在努力实现以下目标。我有一个文本文件,其中包含小说中的几段内容。我已将此文件读入向量。
fileText = ['Token1,''token_2''token%!3']等。
在这种情况下 , _ % !是特殊字符,我想将它们替换为空格('')。可以通过正则表达式来实现吗?我可以使用javascript来做到这一点,但无法在Matlab中使用它。
谢谢
回答:
如果“特殊字符”你的意思是较少用到的Unicode (http://en.wikipedia.org/wiki/Unicode)字符,如楼 , 露 ,或录 ,那么您可以使用该功能REGEXPREP (http://www.mathworks.com/help/techdoc/ref/regexprep.html)或集比较功能,如ISMEMBER (http://www.mathworks.com/help/techdoc/ref/ismember.html) (你可以第一个字符串转换为其对应的整数代码如果需要,请使用功能DOUBLE (http://www.mathworks.com/help/techdoc/ref/double.html) )。以下是几个示例,这些示例从字符串中删除了除标准英语字母字符(小写和大写)之外的所有字符:
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
编辑:
为了响应更新后的问题中的特定示例,以下是如何使用REGEXPREP (http://www.mathworks.com/help/techdoc/ref/regexprep.html)用空格 (http://www.mathworks.com/help/techdoc/ref/regexprep.html)替换不是 az , AZ或0-9所有字符的方法:
str = regexprep(str,'[^a-zA-Z0-9]',''); 这可能比尝试编写一个正则表达式来匹配每个单独的“特殊”字符要容易得多,因为可能有很多正则表达式。但是,如果您确定唯一的特殊字符将是_ , %和! ,则应达到与上述相同的效果:
str = regexprep(str,'[_%!]',''); 另外,如Amro (https://stackoverflow.com/users/97160/amro)的评论中所述,您还可以使用函数ISSTRPROP (http://www.mathworks.com/help/techdoc/ref/isstrprop.html)将所有非字母数字字符替换为空白,如下所示:
str(~isstrprop(str,'alphanum')) = '';
更多&回答... (https://stackoverflow.com/questions/3882609)
谢谢
* 编辑:*
谢谢你的回复。我正在努力实现以下目标。我有一个文本文件,其中包含小说中的几段内容。我已将此文件读入向量。
fileText = ['Token1,''token_2''token%!3']等。
在这种情况下 , _ % !是特殊字符,我想将它们替换为空格('')。可以通过正则表达式来实现吗?我可以使用javascript来做到这一点,但无法在Matlab中使用它。
谢谢
回答:
如果“特殊字符”你的意思是较少用到的Unicode (http://en.wikipedia.org/wiki/Unicode)字符,如楼 , 露 ,或录 ,那么您可以使用该功能REGEXPREP (http://www.mathworks.com/help/techdoc/ref/regexprep.html)或集比较功能,如ISMEMBER (http://www.mathworks.com/help/techdoc/ref/ismember.html) (你可以第一个字符串转换为其对应的整数代码如果需要,请使用功能DOUBLE (http://www.mathworks.com/help/techdoc/ref/double.html) )。以下是几个示例,这些示例从字符串中删除了除标准英语字母字符(小写和大写)之外的所有字符:
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
编辑:
为了响应更新后的问题中的特定示例,以下是如何使用REGEXPREP (http://www.mathworks.com/help/techdoc/ref/regexprep.html)用空格 (http://www.mathworks.com/help/techdoc/ref/regexprep.html)替换不是 az , AZ或0-9所有字符的方法:
str = regexprep(str,'[^a-zA-Z0-9]',''); 这可能比尝试编写一个正则表达式来匹配每个单独的“特殊”字符要容易得多,因为可能有很多正则表达式。但是,如果您确定唯一的特殊字符将是_ , %和! ,则应达到与上述相同的效果:
str = regexprep(str,'[_%!]',''); 另外,如Amro (https://stackoverflow.com/users/97160/amro)的评论中所述,您还可以使用函数ISSTRPROP (http://www.mathworks.com/help/techdoc/ref/isstrprop.html)将所有非字母数字字符替换为空白,如下所示:
str(~isstrprop(str,'alphanum')) = '';
更多&回答... (https://stackoverflow.com/questions/3882609)