我正在为我的CS课程做作业。 我们给了一个纯文本文件,在我的例子中,它包含一系列推文。 我需要做的是创建一个脚本来检测主题标签,然后将每个主题标签保存到一个单元格数组中。
到目前为止,我知道如何编写一个检测'#'符号的函数......
strfind(textRead{i},'#');
其中在for循环中,i = 1:30(即文本的单元格数)。然而,过去,我不知道应该如何编写一个脚本来检测'#'并在该脚本和下一个''(空格)字符之间返回文本。
答案 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);