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$
,所以串联在我的情况下不起作用……但可能对其他人有帮助。再次感谢您快速而彻底的回答。