如何使用正则表达式提取括号中的数字

How to extract numbers in bracket with regex

我可以知道如何使用 regex Matlab

提取括号内的数字吗
str='eeg_eegrej( EEG, [263668 263936] )'

预期应该是

263668 , 263936

我试过如下

regexp(str, '(?<=\([[^)]*(?=\])', 'match')

但是,return 空字符串

您的环视断言几乎是正确的,但我认为您过于复杂了,您可以使用这种模式 '(?<=[)\d+ \d+(?=])',如

>> str = 'eeg_eegrej( EEG, [263668 263936] )';
>> nums = regexp( str, '(?<=[)\d+ \d+(?=])', 'match', 'once' )
nums =
    '263668 263936'

更好的方法是包含括号,然后您可以使用 str2num 得到一个数组

>> str = 'eeg_eegrej( EEG, [263668 263936] )';
>> nums = str2num( regexp( str, '\[\d+ \d+\]', 'match', 'once' ) )
nums =
      [263668, 263936]

如果在第二种情况下没有匹配,那么 nums 将是一个空数组,否则它将是一个 2 元素数组。

我有一些建议适用于您的示例,但它们并没有严格要求解析方括号之间的数字。

从 20b 开始,MATLAB 有了模式。

如果您的问题允许,您可以使用 digitsPattern 提取数字,而无需正则表达式。如果要提取的输入是一个字符串,那么输出将是一个字符串,您可以调用 double 将其转换为数字。

>> str = 'eeg_eegrej( EEG, [263668 263936] )';
>> str = string(str);
>> nums = double(extract(str, digitsPattern))

nums =

      263668
      263936

如果您可以抓住方括号之间的任何内容,您可以使用以下受 Wolfie 回答启发的代码:

>> str = 'eeg_eegrej( EEG, [263668 263936] )';
>> str = string(str);
​>> str2num(extractBetween(str,"[","]"))

​ans =

      ​263668      26393

要将文本转换为数字,我认为对字符串调用 double 最快,其次是 str2double,然后是 str2num。但是,由于它们的行为不同,因此根据您的用例,每个都有一些 pros/cons。