Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 确定单元格数组中是否至少有一个单元格与正则表达式匹配的最简单方法_Regex_Matlab_Cell Array - Fatal编程技术网

Regex 确定单元格数组中是否至少有一个单元格与正则表达式匹配的最简单方法

Regex 确定单元格数组中是否至少有一个单元格与正则表达式匹配的最简单方法,regex,matlab,cell-array,Regex,Matlab,Cell Array,我需要搜索一个单元格数组并返回一个布尔值,指示是否有任何单元格与正则表达式匹配 例如,假设我想知道单元格数组strs是否包含foo或-foo(不区分大小写)。我需要传递给regexpi的正则表达式是^-?foo$ 样本输入: strs={'a','b'}%结果为0 strs={'a','foo'}%结果为1 strs={'a','-FOO'}%结果为1 strs={'a','food'}%结果为0 我根据和提出了以下解决方案,但似乎我应该能够简化它: ~isempty(find(~cellfun

我需要搜索一个单元格数组并返回一个布尔值,指示是否有任何单元格与正则表达式匹配

例如,假设我想知道单元格数组
strs
是否包含
foo
-foo
(不区分大小写)。我需要传递给regexpi的正则表达式是
^-?foo$

样本输入:

strs={'a','b'}
%结果为0

strs={'a','foo'}
%结果为1

strs={'a','-FOO'}
%结果为1

strs={'a','food'}
%结果为0

我根据和提出了以下解决方案,但似乎我应该能够简化它:

~isempty(find(~cellfun('isempty', regexpi(strs, '^-?foo$'))))
我的问题是,对于这样一个简单的操作,它看起来相当神秘。有没有一个更简单、更容易理解的表达式可以用来实现相同的结果?

注意:答案是指问题中的原始regexp:
'-?foo'

您可以避免查找:

any(~cellfun('isempty', regexpi(strs, '-?foo')))
另一种可能性:首先将所有单元格连接成一个字符串:

~isempty(regexpi([strs{:}], '-?foo'))
请注意,您可以删除上述任一选项中的“-”号:

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

~isempty(regexpi([strs{:}], 'foo'))
这允许使用
strfind
(使用
lower
)而不是
regexpi

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

我不认为这很神秘。如果你了解
isempty
find
cellfun
做什么,很明显你可以避免
find
,就像这样:
any(~cellfun('isempty',regexpi(strs',-?foo'))
我忘了
any
!我想至少应该有比用
~isempty(find())
包装更简单的东西。谢谢哎呀,我想我搞错了,我的正则表达式应该是
^-?foo$
,所以串联在我的情况下不起作用……但可能对其他人有帮助。再次感谢您快速而彻底的回答。