我正在爲我的CS課程作業。 我們收到了一個純文本文件,在我的情況下,它包含一系列推文。 我需要做的是創建一個腳本來檢測主題標籤,然後將每個主題標籤保存到單元格數組中。
到目前爲止,我知道如何編寫檢測「#」符號的功能...
strfind(textRead{i},'#');
其中一個for循環,其中i = 1:30(即細胞的數量文本)。然而,過去,我不知道如何編寫一個能夠檢測'#'的腳本,並在該腳本和下一個''(空格)字符之間返回文本。
我正在爲我的CS課程作業。 我們收到了一個純文本文件,在我的情況下,它包含一系列推文。 我需要做的是創建一個腳本來檢測主題標籤,然後將每個主題標籤保存到單元格數組中。
到目前爲止,我知道如何編寫檢測「#」符號的功能...
strfind(textRead{i},'#');
其中一個for循環,其中i = 1:30(即細胞的數量文本)。然而,過去,我不知道如何編寫一個能夠檢測'#'的腳本,並在該腳本和下一個''(空格)字符之間返回文本。
試試這個:
str = '#someHashtag other tweet text ignore #random';
regexp(str, '#[A-z]*', 'match')
我認爲你可以找到休息了自己:)
這正是我需要它做的!謝謝!我真的不知道它是如何工作的... – user1902116
哦!我現在明白了。 – user1902116
@ user1902116:這是[正則表達式]的魔力(http://en.wikipedia.org/wiki/Regular_expression)!我強烈建議你學習它們,並且很好地學習它們。 –
這是基本骨架。但一定要使用正確的正則表達式來提取值;-)
是的,與上述多林的正則表達式和匹配,你一次得到一個值。根據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);
正則表達式似乎比簡單的strfind更適合,因爲你要查找的哈希值,而不是哈希本身後話。)這可能是對你有用(http://stackoverflow.com/questions/1563844/best-hashtag-regex) –
其他一些人似乎擁有相同的任務。尋找他們得到的答案。 – Jonas