解析正则表达式语法问题matlab / octave

时间:2015-01-26 01:32:46

标签: regex matlab octave

我可以在下面的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)*$])

我该如何解决这个正则表达式?

1 个答案:

答案 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将此字符串转换为数字。