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



我可以知道如何使用regexMatlab 提取括号内的数字吗

str='eeg_eegrej( EEG, [263668 263936] )'

预期应为

263668,263936

我尝试了以下

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

但是,返回空字符串

您的环视断言几乎是正确的,但我认为您已经过于复杂了,您可以使用这种模式'(?<=[)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就有了模式。

如果您的问题允许,您可以使用digitalsPattern提取数字,而无需使用regexp。如果要提取的输入是字符串,那么输出将是字符串,您只需调用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。然而,由于它们的行为不同,根据您的用例,每种方法都有一些优点/缺点。

相关内容

  • 没有找到相关文章

最新更新