0

重複の可能性:
正規表現を使用して単語を検索する

CSコースの課題に取り組んでいます。プレーンテキストファイルが提供されます。私の場合は、一連のツイートが含まれています。私がする必要があるのは、ハッシュタグを検出するスクリプトを作成し、各ハッシュタグをセル配列に保存することです。

これまでのところ、「#」記号を検出する関数を作成する方法を知っています。

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

ここで、i = 1:30(つまり、テキストのセル数)のforループ内。ただし、それを過ぎると、「#」を検出し、その文字と次の「」(スペース)文字の間のテキストを返すスクリプトをどのように作成すればよいか迷っています。

4

2 に答える 2

2

これを試して:

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

残りは自分で見つけられると思います:)

于 2012-12-13T20:02:02.027 に答える
1

こちらが基本骨格です。ただし、正しい正規表現を使用して値を抽出してください;-)

はい、上記の Dorin の正規表現と一致すると、一度に 1 つの値が得られます。tokenMathworks のこの例のように を追加できます。サンプル:

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' 

上記のコードでは、実際にループする必要はなく、テキスト全体を 1 つの文字列として処理できます。できれば、文字列の制限に達しないことを願っています ...... しかし、ループしたい場合、またはループする必要がある場合は、ロディの正規表現と一致のみを使用した次のサンプル。

 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 に答える