RegEx用于在MATLAB中捕获科学数字

时间:2019-05-25 16:54:57

标签: regex matlab regex-lookarounds regex-group regex-greedy

我的印象是,我将拥有使用regexp解析数字的更优雅,更紧凑的方式。我知道如何解析几种格式的数字,

str_expr = '[\-\+\d\.E]+';
fruit    = regexp(str_text, str_expr, 'match')

我知道该如何看待,

(?<=test)expr

但是,如果我想在某些“测试”后进行匹配以匹配多个数字怎么办?我通常使用两个正则表达式来完成它,一个用于后面的视图,第二个用于解析数字。例如:

str_text = 'bla, ble,... bli, 1     -0.1243E-02    23.123E+03'

% pre-digest: look behind
str_reg1 = '(?<=bli,).*'
fruit    = regexp(str_text, str_reg1, 'match')

% parse numbers
str_reg2 = '[\-\+\d\.E]+'
fruit    = regexp(fruit{1}, str_reg2, 'match')

如果我尝试一步一步做,只会抓到第一个数字

% 1st try..
str_reg_try1 = '(?<=bli,)[\-\+\d\.E]+'
fruit        = regexp(fruit{1}, str_reg_try1, 'match')

% 2nd try..
str_reg_try2 = '(?<=bli,)([\-\+\d\.E]+)+'
fruit        = regexp(fruit{1}, str_reg_try1, 'tokens')

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果我的猜测可能接近,那么在这里,我们正在寻求收集数字。我很肯定我们可能希望在将字符串传递给RegEx引擎之前将其分解为两个或更多部分:

bla, ble,... bli,
1     -0.1243E-02    23.123E+03

然后,在这种情况下,我们甚至可能不需要正则表达式。


或者我们可能只想集成一些简单的表达式,例如:

(.+?bli,)|([0-9-E.\-+]+)

Demo

此外,我认为评论中bobble bubble的建议是更好的选择(link):

(?:\G(?!^)|bli,)\s+\K[-+\d.E]+

RegEx

如果不需要此表达式,可以在regex101.com中对其进行修改或更改。

RegEx电路

jex.im可视化正则表达式:

enter image description here