我可以知道如何使用regex
Matlab 提取括号内的数字吗
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。然而,由于它们的行为不同,根据您的用例,每种方法都有一些优点/缺点。