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

parsing regular expression syntax issue 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)*$])

如何修正这个正则表达式?

假设您要查找字符串末尾的数字,第一种方法的正则表达式就可以了。因为您的新字符串中有一个结束字符 ],您的正则表达式将不起作用,因为您的字符串 没有以数字 结尾。因此,只需删除 $ 字符就可以了,因为您想要搜索一个可能是也可能不是浮点数的数字。您的 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.

将此字符串转换为数字