正则表达式在matlab中的表现不如预期

时间:2017-02-08 19:09:39

标签: regex matlab

在matlab中我有一个字符串:

y = '[3-G]]3|25+3|[3-G]4|25+4|G5|25+5|F'

然后我有一个名为intHit的变量,我需要返回一个单元格数组,如果后跟一个符号,则包含一个int。因此,如果我们将其定义为:

intHit = regexp(y,'(\d*)([+-])','Match');

它返回类似:

intHit =

1×5细胞阵列

'3-'    '25+'    '3-'    '25+'    '25+'

然而,有时我的intHit调用,取决于y的输入返回减号( - )符号,前面没有整数。我认为我的正则表达式是错误的。有人可以帮我格式化这个,所以它只会返回一个整数后加一个加号(+)或减号( - )。所以总是像上面的例子。提前致谢。

1 个答案:

答案 0 :(得分:3)

请改为尝试:

intHit = regexp(y,'(\d+)([+-])','Match');
                      ^--- that's the change

我认为你错了quantifier*将连续匹配0次或更多次(这意味着它可以匹配单独的优缺点),而+将连续匹配1次或更多次。

此外,如果您没有捕获令牌,则可以将匹配表达式简化为'\d+[+-]'

相关问题