我可以在下面的matlab / octave中解析正则表达式:
A = 'Var Name 123.5'
[si ei xt mt] = regexp(A, '(\d)*(\.)?(\d)*$')
number = str2num(mt{1})
number = 123.50
但由于]
,我得到的语法错误最低A='[angle_deg = 75.01323334803705]'
[si ei xt mt] = regexp(A, '(\d)*(\.)?(\d)*$])
我该如何解决这个正则表达式?
答案 0 :(得分:1)
假设您在字符串末尾查找数字,那么第一种方法的正则表达式就可以了。由于您的新字符串中包含结尾]
字符,因此您的正则表达式无法正常工作,因为您的字符串不会以数字结尾。因此,只需删除$
字符即可,因为您要搜索一个可能是浮点数也可能不是浮点数的数字。您的regex
中有三个捕获组,其中第一个捕获组抓取数字的整数部分,第二个捕获组可选地抓取小数点,最后一个捕获组抓取您的数字的浮点部分。
您也没有在regex
中正确关闭字符串。它需要一个结束的单引号。因此:
A='[angle_deg = 75.01323334803705]';
[si ei xt mt] = regexp(A, '(\d)*(\.)?(\d)*');
显示regexp
的所有输出变量,这就是我得到的:
>> si
si =
14
>> ei
ei =
30
>> xt
xt =
[3x2 double]
>> mt
mt =
'75.01323334803705'
si
表示匹配发生的起始索引,即字符串中的索引14。 ei
表示匹配发生的结束索引,即索引30. xt
显示匹配正则表达式的每个标记或捕获组的起始和结束索引。要显示此信息,只需执行以下操作:
>> xt{1}
ans =
14 15
16 16
17 30
因此,第一个捕获组从索引14开始,到索引15结束,这是您号码的75
部分。第二个捕获组从索引16开始,也在那里结束,表示.
个字符。最后,索引17到30表示数字的浮点部分,即01323334803705
。要完成所有操作,mt
会向您显示与正则表达式匹配的提取字符串,该字符串是此字符串末尾的数字。您当然可以使用str2num
将此字符串转换为数字。