matlab:regexp和split,并选择一些单元格

时间:2012-10-02 18:25:06

标签: regex string matlab split format

我有以下输入:

>> 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。

2 个答案:

答案 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'