1

セル配列を検索し、セルが正規表現に一致するかどうかを示す単一のブール値を返す必要があります。

たとえば、セル配列strsfooorが含まれているかどうかを調べたいとします-foo(大文字と小文字は区別されません)。regexpi に渡す必要がある正規表現は^-?foo$.

サンプル入力:

strs={'a','b'}% 結果は 0

strs={'a','foo'}% 結果は 1

strs={'a','-FOO'}% 結果は 1

strs={'a','food'}% 結果は 0

私は、Matlab の ismember 関数でワイルドカードを実装するにはどうすればよいですか? に基づいて、次のソリューションを思いつきました。セル配列を regex で検索していますが、単純化できるはずです。

~isempty(find(~cellfun('isempty', regexpi(strs, '^-?foo$'))))

私が抱えている問題は、このような単純な操作ではかなり不可解に見えることです。同じ結果を得るために使用できる、より単純で人間が読める式はありますか?

4

1 に答える 1

2

:答えは、質問の元の正規表現を参照しています:'-?foo'

あなたは避けることができますfind

any(~cellfun('isempty', regexpi(strs, '-?foo')))

別の可能性: 最初にすべてのセルを 1 つの文字列に連結します。

~isempty(regexpi([strs{:}], '-?foo'))

上記のいずれかで「-」記号を削除できることに注意してください。

any(~cellfun('isempty', regexpi(strs, 'foo')))

~isempty(regexpi([strs{:}], 'foo'))

そして、それはの代わりにstrfind(with ) を使用することを可能にします:lowerregexpi

~isempty(strfind(lower([strs{:}]),'foo'))
于 2013-10-25T18:25:47.150 に答える