在MATLAB中从单元格中提取字符串

时间:2012-12-13 19:53:20

标签: matlab

  

可能重复:
  Using regexp to find a word

我正在为我的CS课程做作业。 我们给了一个纯文本文件,在我的例子中,它包含一系列推文。 我需要做的是创建一个脚本来检测主题标签,然后将每个主题标签保存到一个单元格数组中。

到目前为止,我知道如何编写一个检测'#'符号的函数......

strfind(textRead{i},'#');

其中在for循环中,i = 1:30(即文本的单元格数)。然而,过去,我不知道应该如何编写一个脚本来检测'#'并在该脚本和下一个''(空格)字符之间返回文本。

2 个答案:

答案 0 :(得分:2)

试试这个:

str = '#someHashtag other tweet text ignore #random';
regexp(str, '#[A-z]*', 'match')

我想你可以自己找到剩下的:)“

答案 1 :(得分:1)

这是基本的骨架。但请确保使用正确的正则表达式来提取值;-)

对于上面的Dorin的正则表达式和匹配,你一次得到一个值。您可以在mathworks中根据此示例添加token。  样本:

str = ['if <code>A </code> == x<sup>2 </sup>, ' ... '<em>disp(x) </em>'] 
str = if <code>A </code> == x<sup>2 </sup>, <em>disp(x) </em> 
expr = '<(\w+).*?>.*?</\1>';
[tok mat] = regexp(str, expr, 'tokens', 'match'); 
tok{:}
ans = 'code' 
ans = 'sup' 
ans = 'em' 

在上面的代码中,你真的不需要循环,并且可以将整个文本批处理作为一个字符串,希望不会遇到任何字符串限制...... 但是如果你想循环,或者你需要循环,你可以使用以下示例和Rody的正则表达式匹配。

 fid = fopen('data.txt'); 
 dataText = fgetl(fid);
 while ~feof(fid) 
    ldata = textscan(dataText,'*%d#*'); 
          X = (ldata, '#[A-z]*', 'match') 
         Cellarray =  X{1}      
   end
  Disp(X)
 fclose(fid);