1

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

例如,假设我想知道元胞数组是否strs包含fooor -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')))

另一种可能性:首先将所有单元格连接成一个字符串:

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

请注意,您可以删除上述任何一项中的“-”号:

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

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

这允许使用strfind(with lower) 而不是regexpi

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