2012-01-24 33 views
0

matlabの大きな文字列の中で、大文字の文字列を長さ2〜4の長さで見つけることができます。たとえば、文字列があるとします。大文字の大文字文字列を検出する

stringy = 'I imagine I could FLY'; 

文字列のFLY部分を抽出するにはいい方法がありますか?現在、私はこのような大文字です文字列内のすべての文字を識別するために、上側()関数を使用しています...そして

for count = 1:length(stringy) 
    if upper(stringy(count))==stringy(count) 
      isupper(count)=1; 
    else 
      isupper(count)=0; 
    end 
end 

そして、私はちょうどバイナリーベクターを通過するとき 識別していますその列に2-4の1があります。

このメソッドは動作しています...しかし、よりクリーンな方法があるかどうか疑問に思っています これを行うには...ありがとう!!!

+0

これは役立つかもしれない...
http://stackoverflow.com/questions/4598315/regex-to-match-only-uppercase -words-with-some-excepti ons Good Luck。 – Raathigesh

答えて

4

これに正規表現を使用できます。正規表現[A-Z]{2,4}は、文字列内の大文字2〜4文字を検索します。

対応するmatlab関数はregexpと呼ばれます。

regexp(string,pattern)は、と一致するすべての場所のstringにサブインデックスを返します。

  1. \<[A-Z]{2,4}\>

    あなたのパターンについては

    私は2つの提案があります。

    stringy = 'I imagine I could FLY and TOUCH THE SKY'; 
    regexp(stringy,'\<[A-Z]{2,4}\>') % returns 19, 33, 37 ('FLY','THE','SKY') 
    

    編集:これは単語全体 2-4大文字で構成され(それは以下のTOUCHをつかむしない)を検索MATLABは、ワード境界のため\<\>を使用しない標準\b )。あなたはケースがワード内で混合することができる文字列を持っていて、それらを抽出したい場合は

  2. 、してみてください(大文字に囲まれていない「2-4大文字意味)(?<![A-Z])[A-Z]{2,4}(?![A-Z])

    stringy = 'I image I could FLYandTouchTHEsky'; 
    % returns 17 and 28 ('FLY', 'THE') 
    regexp(stringy,'(?<![A-Z])[A-Z]{2,4}(?![A-Z])') 
    
    % note '\<[A-Z]{2,4}\>' wouldn't match anything here since it looks for 
    % *whole words* that consist of 2-4 capital letters only. 
    % 'FLYandTouchTHEsky' doesn't satisfy this. 
    

あなたが起こるしたいものを行動に基づいて正規表現を選択してください。

+0

これは完璧に動作するように見えます!ありがとう! 1つの質問...あなたがポイント#1にあるアプローチを試すと、空の出力が得られます。それはなぜでしょうか? (私があなたがコンソールで行った2つのステートメントを使用したことを意味します) – Flaminator

+0

ええと、Matlabは '\ b'ではなく単語境界に' \ <' and '\> 'を使用しています。 b '...) –

+0

パーフェクト、ありがとう!だから、このアプローチは、大文字セクションの開始のインデックスを返しますが、2,3または4大文字の文字列かどうかを示しませんか? – Flaminator

関連する問題