0

可能重复:
使用正则表达式查找单词

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

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

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

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

4

2 回答 2

2

尝试这个:

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

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

于 2012-12-13T20:02:02.027 回答
1

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

是的,使用上述 Dorin 的正则表达式并匹配您一次得到一个值。您可以token根据这个示例从 mathworks 添加一个。样本:

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); 
于 2012-12-13T21:10:42.123 回答