我有一个字符向量记录列表。这是一个例子:
'1mil_0,1_1_1_lb200_ks_drivers_sorted.csv'
'1mil_0_1_lb100_ks_drivers_sorted.csv'
'1mil_1_1_lb2_100_100_ks_drivers_sorted.csv'
'1mil_1_1_lb100_ks_drivers_sorted.csv'
从这些名称中,我想提取两个子串1mil_
和_ks_drivers_sorted.csv
之间的任何内容。
所以在这种情况下,输出将是:
0,1_1_1_lb200
0_1_lb100
1_1_lb2_100_100
1_1_lb100
我使用的是MATLAB,所以我想用regexp
来做这件事,但我无法理解什么样的正则表达式是正确的。
或者是否有其他方法可以在不使用regexp
的情况下执行此操作?
答案 0 :(得分:4)
让数据为:
x = {'1mil_0,1_1_1_lb200_ks_drivers_sorted.csv'
'1mil_0_1_lb100_ks_drivers_sorted.csv'
'1mil_1_1_lb2_100_100_ks_drivers_sorted.csv'
'1mil_1_1_lb100_ks_drivers_sorted.csv'};
您可以使用lookbehind and lookahead查找两个限制子字符串,并匹配其间的所有内容:
result = cellfun(@(c) regexp(c, '(?<=1mil_).*(?=_ks_drivers_sorted\.csv)', 'match'), x);
或者,由于正则表达式只生成一个匹配项,因此可以使用以下更简单的替代方法(感谢@excaza注意):
result = regexp(x, '(?<=1mil_).*(?=_ks_drivers_sorted\.csv)', 'match', 'once');
在您的示例中,上述任一项都给出了
result =
4×1 cell array
'0,1_1_1_lb200'
'0_1_lb100'
'1_1_lb2_100_100'
'1_1_lb100'
答案 1 :(得分:0)
对我来说,简单的方法就是使用espace或者什么都不用来替换你不需要的字符串,剩下的就是你需要的。
如果是列表,您可以使用循环来执行此操作。
例如替换&#34; 1mil _&#34;用&#34;&#34;和&#34; _ks_drivers_sorted.csv&#34;用&#34;&#34;
newChr = strrep(chr,'1mil_','')
newChr = strrep(chr,'_ks_drivers_sorted.csv','')