【问题标题】:Extracting strings from cells in MATLAB [duplicate]从MATLAB中的单元格中提取字符串[重复]
【发布时间】:2012-12-01 18:55:02
【问题描述】:

可能重复:
Using regexp to find a word

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

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

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

在 for 循环中 i=1:30 的位置(即文本单元格的数量)。但是,除此之外,我不知道应该如何编写一个脚本来检测“#”并返回该和下一个“”(空格)字符之间的文本。

【问题讨论】:

  • regexp 似乎比简单的 strfind 更合适,因为您想在哈希之后找到单词而不是哈希本身;)this is probably useful to you
  • 其他一些人似乎也有同样的任务。寻找他们得到的答案。

标签: matlab


【解决方案1】:

试试这个:

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

我想你可以自己找出其余的 :)

【讨论】:

  • 这正是我需要它做的!谢谢!我真的不知道它是如何工作的......
  • @user1902116:这就是regular expressions 的魔力!我强烈建议你学习它们,并且好好学习它们。
【解决方案2】:

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

是的,使用上述 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); 

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2015-08-15
    相关资源
    最近更新 更多