如何使用正则表达式提取括号中的数字
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。
我可以知道如何使用 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。