Matlab:如何将字符数组或字符串转换为格式化输出或解析字符串
有人能告诉我如何使用Matlab将字符数组转换为格式化输出?Matlab:如何将字符数组或字符串转换为格式化输出或解析字符串
我期待的数据是这样的:
CHAR (1 x 29) : 0.050822999 3.141592979 ; (1)
OR
CELL (1 x 1) or string: '0.050822999 3.141592979 ; (1)'
我要找的输出是这样的:
d1 = 0.050822999; %double
d2 = 3.141592979; %double
index = 1; % integer
我试着换位,然后用str2num(海峡“);但是,它返回给我0x 0双。
任何帮助,将不胜感激。
问候, DK
可以使用regexp
解析字符串
c = { '0.050822999 3.141592979 ; (1)' };
p = regexp(c{1}, '^(\d+\.\d+)\s(\d+\.\d+)\s*;\s*\((\d+)\)$', 'tokens', 'once'); %//parse the input string
numbers = str2mat(p); %// convert extracted strings to numerical values
结果示例
ans =
0.050822999
3.141592979
1
在解释regexp
模式:
-
^
- PATT ERN开始于输入字符串 -
(\d+\.\d+)
的开始 - 括号('()'
)包围此子模式指示它作为一个单一令牌\d+
匹配一个或多个数字,则期待\.
点(注意\
,由于.
在正则表达式中单独用作通配符)并且在点\d+
之后期望一个或多个数字。
此令牌应该对应于第一数量,例如,0.050822999
\s
-
(\d+\.\d+)
期待一个单一的空间 - 再次,期待另一个小数作为第二令牌。 -
\s*
- 期待空白(零或更多)。 -
;
- 在表达式中捕获;
,但不是作为标记。 -
\s+
- 期待空白(零或更多)。 -
\(
- 期待左括号,请注意\
,因为正则表达式中的括号用于表示令牌。 -
(\d+)
- 期待一个或多个数字作为第三个标记,这里只需要整数。没有小数点。 -
\)
- 期待一个右括号。 -
$
- 模式应该到达输入字符串的末尾。
谢谢。那工作。你能否请你解释正则表达式中的模式? – 2014-10-01 13:06:58
@DushyantKumar请参阅我的更新。 – Shai 2014-10-01 17:51:38
感谢您解释模式。 – 2014-10-02 07:18:36
您可以使用这样的事情(如果我理解正确的你)
function str_dump(var)
info = whos;
disp([info.class ' ' mat2str(info.size) ' : ' var]);
end
这只是显示了关于字符串信息。如果你想解析它并转换为另一个Matlab的结构,你必须更仔细地解释它。
%// Input
a = [0.050822999 3.141592979];
n = 1;
%// Output
str = [num2str(a,'%0.9f ') ' ; (' num2str(n) ')']
结果:
str =
0.050822999 3.141592979 ; (1)
请提供与实施例的输出的示例字符数组...或者是这些输入?如果他们不是说'CELL(1 x 1):...',可以更清楚地说'Str = {'0.050822999 3.141592979}',然后提供您期望的格式化输出 – Dan 2014-10-01 06:37:08
您输入的是什么使用? – Nick 2014-10-01 07:01:28