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

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

我的印象是,使用正则表达式可以更优雅,更紧凑地解析数字。我知道如何解析几种格式的数字

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

而且我知道如何落后
(?<=test)expr

但是,如果我想在经过一定的“测试”之后匹配多个数字,该怎么办?我通常使用两个正则表达式来完成它,一个用于后面的 View ,第二个用于解析数字。例如:
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')

我该如何解决这个问题?

最佳答案

如果我的猜测可能接近,那么在这里,我们正在寻求收集数字。我很肯定我们可能希望在将字符串传递给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]+

正则表达式

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

RegEx电路

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

enter image description here

关于regex - RegEx用于在MATLAB中捕获科学数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56306899/

相关文章:

javascript - 用于替换 JavaScript 模式的正则表达式

javascript - 正则表达式排除不符合由分隔符分隔的两个模式之一的匹配项

javascript - 排除包含正则表达式字符串的 URL

java正则表达式匹配任何字符串,特定字符串,任何字符串,特定字符串和任何字符串

MATLAB 矢量化以创建矩阵

matlab - 测量 [x y] 点的 3d block 的高度

php - 字符串中的数字词转化为数字

matlab - 使用 ASM 坐标进行眨眼检测

javascript - JS 中的lookbehind 支持是什么?如何更换?

javascript - 如何查找文本但将其从匹配正则表达式中排除?