我有以下输入:
>> data(1).Header
ans =
AF051909 |392-397:CAGCTG| |413-418:CAGGTG|
我需要将它们保存到单元格{'392-397', 'CAGCTG'; '413-418', 'CAGGTG';}
我因此使用regexp来执行以下代码:
struKm(1).trueBinding = regexp(data(1).Header,'\s\||\:|\|','split');
返回:
>> struKm(1).trueBinding
ans =
'AF051909' '392-397' 'CAGCTG' '' '413-418' 'CAGGTG' ''
你可以看到有空的细胞,我试过两个找出它们为什么但却失败了。
我也试图忽略这一点,并继续为我的其余代码'CAGCTG'
和'CAGGTG'
选择我需要的单元格。我有这个代码来接他们:
[r1,r2] = ismember(struKm(1).trueBinding,set)
它返回零。
有人可以帮助解决两个问题吗?
问候,A。
答案 0 :(得分:1)
我假设您只想从该细胞阵列中提取出仅有的两个核苷酸序列。如果是这种情况,这似乎有效:
atgc = @(str) (sum(lower(str)==97 | lower(str)==116 | lower(str) == 103 ...
| lower(str) == 99)==numel(str)) && numel(str)~=0;
data(1).Header = 'AF051909 |392-397:CAGCTG| |413-418:CAGGTG|';
result1 = regexp(data(1).Header,'\s\||\:|\|','split');
results = result(cellfun(atgc,result1))
这给出了
results =
'CAGCTG' 'CAGGTG'
答案 1 :(得分:1)
您可以尝试匹配而不是拆分:
match = regexp(data(1).Header,'\|(.*?):(.*?)\|','tokens');
现在匹配将包含两个单元格数组:
>> match
match =
{1x2 cell} {1x2 cell}
你可以这样访问:
>> match{1}
ans =
'392-397' 'CAGCTG'
>> match{2}
ans =
'413-418' 'CAGGTG'
要将此单元格数组的单元格数组转换为您最初请求的格式,您可以执行以下操作:
>> struKm(1).trueBinding = cat(1,match{:})
struKm(1).trueBinding =
'392-397' 'CAGCTG'
'413-418' 'CAGGTG'