2012-12-13 70 views
0

可能重複:
Using regexp to find a word從提取的細胞串在MATLAB

我正在爲我的CS課程作業。 我們收到了一個純文本文件,在我的情況下,它包含一系列推文。 我需要做的是創建一個腳本來檢測主題標籤,然後將每個主題標籤保存到單元格數組中。

到目前爲止,我知道如何編寫檢測「#」符號的功能...

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

其中一個for循環,其中i = 1:30(即細胞的數量文本)。然而,過去,我不知道如何編寫一個能夠檢測'#'的腳本,並在該腳本和下一個''(空格)字符之間返回文本。

+0

正則表達式似乎比簡單的strfind更適合,因爲你要查找的哈希值,而不是哈希本身後話。)這可能是對你有用(http://stackoverflow.com/questions/1563844/best-hashtag-regex) –

+0

其他一些人似乎擁有相同的任務。尋找他們得到的答案。 – Jonas

回答

2

試試這個:

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

我認爲你可以找到休息了自己:)

+0

這正是我需要它做的!謝謝!我真的不知道它是如何工作的... – user1902116

+0

哦!我現在明白了。 – user1902116

+1

@ user1902116:這是[正則表達式]的魔力(http://en.wikipedia.org/wiki/Regular_expression)!我強烈建議你學習它們,並且很好地學習它們。 –

1

這是基本骨架。但一定要使用正確的正則表達式來提取值;-)

是的,與上述多林的正則表達式和匹配,你一次得到一個值。根據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);