【发布时间】:2016-06-30 19:53:10
【问题描述】:
我有一个数字元胞数组(字符串格式),我想在 matlab 中将其转换为数字。问题是它们是双引号的,我似乎无法使用 str2num 来转换它们。
a = {'"15"'; '"16"'; '"17"'; '"30"'; '"50"'}
有什么方法可以这样做或从数字中删除双引号?谢谢!
【问题讨论】:
我有一个数字元胞数组(字符串格式),我想在 matlab 中将其转换为数字。问题是它们是双引号的,我似乎无法使用 str2num 来转换它们。
a = {'"15"'; '"16"'; '"17"'; '"30"'; '"50"'}
有什么方法可以这样做或从数字中删除双引号?谢谢!
【问题讨论】:
您需要手动删除双引号。您可以使用cellfun 将anonymous function 应用于每个单元格。这里有两种可能的方法:
匿名函数只是去掉第一个和最后一个字符。如果双引号符号始终位于这些位置,则此方法有效:
a = {'"15"'; '"16"'; '"17"'; '"30"'; '"50"'};
result = cellfun(@(x) str2double(x(2:end-1)), a);
如果某些字符串可能不包含双引号符号,或者可能在任意位置包含多个符号,请使用匿名函数删除该符号的任何出现:
a = {'15'; '16'; '"17"'; '30"'; '"""50"""'};
result = cellfun(@(x) str2double(x(x~='"')), a);
【讨论】:
result = cellfun(@str2double, regexp(a, '\d+\.?\d*', 'match'))
.123(不带前导0)之类的东西,则将修改正则表达式
'(+|-)?\d*\.?\d*' 希望输入数据没有那么糟糕;)