2016-08-17 1 views
0
f = dir('../Data/PML*.mat'); 
f1 = regexp({f.name}, 'PML*.mat', 'match'); 
[f1{:}] 

これは、親ディレクトリにあるDataフォルダ内のファイルを選択するコードのスニペットです。 fは66要素の構造体配列です(そこには66のファイルがあります)。これらのうちファイル名が次のようなファイルを選択したいとします: PMLsigma_8PMLkappa_6.mat。しかし、これらの操作の結果は空のセル配列であり、結果として空の配列になることは考えられません。 2番目の行に'PML*.mat'の代わりに - f1の定義で - 完全なファイル名を書いても問題はありません。私はここで間違って何をしていますか?Matlab regexpコマンドが意図したとおりに動作しない

EDIT:{f.name}セル配列の最初の2つの要素

R =

'PMLsigma_10PMLkappa_1.mat' 'PMLsigma_10PMLkappa_2.mat' 
+1

'f.name'のサンプルを提供してください – excaza

+0

@excaza最初の2つの文字列を追加しました。 – Vesnog

答えて

2

私はexpression部分に特に注意を払って、MATLABのregexp documentation再び経由することをお勧め。

あなたの正規表現式'PML*.mat'は、以下の基準に従ったファイルと一致するようにしようとしている:

  1. PM)一致PM正確
  2. L*)0との間の一致L無制限回
  3. .)任意の1文字に一致する
  4. mat)一致mat正確には
  5. 個の

マッチした文字列が含まれる:PML.matPMkmat、及びPMLLLLLLLLLLLLLLL.mat

つの機能の選択肢は以下のように動作'PML.*\.mat'、かもしれない:

  1. PML)一致PML正確
  2. .*) 0〜無制限の任意の文字に一致します。
  3. \.)マッチ.正確に(\escape characterある)
  4. mat)一致mat正確

さておき、あなたはすでにあなたのdir呼び出しで結果をフィルタリングしている場合は、なぜあなたはregexpが必要なのですかと?

+0

ファイル名の細かいフィルタリングを行うことがあります。そのため、コード内に正規表現があるのはなぜですか。私は 'dir'コマンドで働いていたときに正規表現が働いたと思っていました。私はドキュメントをチェックしましたが、私はこの微妙なことに気づいていませんでした。ありがとう – Vesnog

関連する問題