use*_*243 1 regex string matlab
假设我们有这两种类型的日期:
type_1 = {'23.2.2005', '23.4.2015', '5.1.2015'};
type_2 = {'23.02.2005', '23.04.2015', '05.01.2015'};
Run Code Online (Sandbox Code Playgroud)
当我们使用这个函数比较这两种类型时:
ismember(type_1,type_2)
Run Code Online (Sandbox Code Playgroud)
这两种类型中没有任何相等(因为添加了零type2).我们如何正确比较这两种类型?
另一种方法是使用datestr和datenum强制执行额外的零转换.
type_1 = datestr(datenum(type_1, 'dd.mm.yyyy'), 'dd.mm.yyyy');
type_2 = datestr(datenum(type_2, 'dd.mm.yyyy'), 'dd.mm.yyyy');
Run Code Online (Sandbox Code Playgroud)
datestr需要MATLAB日期编号才能输出日期的字符串表示.这就是为什么datenum使用,你可以看到,即使我们指定月或日的两位数,它足够聪明,如果这些数量有一个数字,并成功转换日期数字.然后我们使用这些日期编号进行管道输入,datestr以确保在需要时我们有额外的零.
但是,这会将单元格数组转换为字符数组.你必须使用以下方法将它们放回到单元格数组中cellstr:
type_1 = cellstr(type_1);
type_2 = cellstr(type_2);
Run Code Online (Sandbox Code Playgroud)
这是一些示例输出:
>> type_1 = {'23.2.2005', '23.4.2015', '5.1.2015'}
type_1 =
'23.2.2005' '23.4.2015' '5.1.2015'
>> type_2 = {'23.02.2005', '23.04.2015', '05.01.2015'}
type_2 =
'23.02.2005' '23.04.2015' '05.01.2015'
>> type_1 = datestr(datenum(type_1, 'dd.mm.yyyy'), 'dd.mm.yyyy')
type_1 =
23.02.2005
23.04.2015
05.01.2015
>> type_2 = datestr(datenum(type_2, 'dd.mm.yyyy'), 'dd.mm.yyyy')
type_2 =
23.02.2005
23.04.2015
05.01.2015
>> type_1 = cellstr(type_1)
type_1 =
'23.02.2005'
'23.04.2015'
'05.01.2015'
>> type_2 = cellstr(type_2)
type_2 =
'23.02.2005'
'23.04.2015'
'05.01.2015'
>> ismember(type_1, type_2)
ans =
1
1
1
Run Code Online (Sandbox Code Playgroud)
小智 5
这样可以避免使用regexp数字转换技巧:
del0str = @(x) sprintf('%d.%d.%d',sscanf(x,'%d.%d.%d'));
del0cell = @(x) cellfun(del0str, x, 'UniformOutput', false);
[ix1, ix2] = ismember(del0cell(type_1), del0cell(type_2));
Run Code Online (Sandbox Code Playgroud)
请注意,无论日期中的订单或日/月/年,只要订单在两个单元格日期之间保持一致,此操作就会起作用.