1

指定された正規表現で始まるすべての配列要素の数値インデックスを返す strmatch と同等の関数はありますか ( string の代わりに?

背景: という文字列の配列がありますstrarray。特定の を持たないすべての文字列を除外したいstrprefix。特定のプレフィックスが存在する文字列の配列 ( strmatch func ) のインデックスを検索し、プレフィックスを含む行から新しい配列を構築する次のコード:

indexes = [];
n = strmatch(strprefix, strarray);
indexes = [indexes,n];
indexes = sort(indexes);
newarray = strarray(indexes);

問題なく動作しますが、これprefixは文字列であり、代わりに定義済みの正規表現を使用したいと思います。

または、おそらくそのようなタスクを実行するためのより簡単な方法 (ワンライナー?) がありますか?


アップデート

私はregexp関数を知っています。文字列の配列から文字列を除外しようとしていますが、1 つまたは 2 つのステップでそれを行うのに苦労しています。これを行うための私の現在のコード(Matlabの正しいコーディング方法かどうかはわかりません)。

  • ステップ 1.プレフィックスなしで文字列を空にします。regexp(strarray,[prefix,'.*'],'match','once');
  • ステップ 2. 空行のインデックスを取得するemptyCells = cellfun(@isempty,array);
  • ステップ 3. 空の行を削除するarray(emptyCells) = [];
4

2 に答える 2

2

あなたは実際に自分で問題を解決しましたが、ここでは、あなたが言うことすべてを 1 行 (長い) 行で行う方法を示します。prefix注-文字列がで始まると想定して^いるため、「文字列の開始」に適切に一致します(実際にそれがあなたがやりたいことである場合)。その他の質問 - strarray 内のすべての文字列が同じ長さでない限り、実際にはセル配列を使用する必要があります。その場合、ステップ 3 は文字列を削除せず、単に に設定し[]ます。したがって、悪い文字列を削除するのではなく、出力に「すべての良い文字列を含める」ようにロジックを変更することをお勧めします。これにより、次のようになります。

strippedArray = strarray(~cellfun('isempty',regexp(strarray,[prefix,'.*'],'match','once')));

これは私のために働いた...

于 2013-02-07T15:15:48.610 に答える
1

関数REGEXPを使用すると、正規表現を使用して文字列を照合できます。

正規表現の作成または適用についてサポートが必要な場合は、追加の詳細を投稿することをお勧めします。

于 2013-02-07T13:19:29.027 に答える