If Regexp matches return 1 otherwise 0 syntax
Mostrar comentarios más antiguos
Hi,
Right now I'm using the following to get a boolean result from a regexp. It just doesn't feel right - is there a better way to do this?
(size(regexp(myInput,myPattern),1)>0)
1 comentario
Azzi Abdelmalek
el 25 de Mzo. de 2013
What do you mean?
Respuesta aceptada
Más respuestas (4)
If your input to regex is a cell array (say from collecting from a struct or something), then your output will be a cell array which is not immediately able to be used for logical indexing. You need to convert it from a cell array to a logical array. But many times you'll get empty cells so you can't just use cell2mat because that will implicitly ditch the empty cells and only leave you with the non-empty which doesn't help for indexing. Therefore, I use this following approach to go from an input of a cell array to an output of a logical array.
This is how I get a logical array out of regex:
logicalMatches = ~cellfun('isempty', regexpi({filesInDir.name}, stringToBeFound, 'once'));
1 comentario
James Van Zandt
el 12 de Mayo de 2022
I have a cell array of strings to test, so I used this method to collect the matches.
K>> ca={'able','baker','charlie','delta','echo','fox','golf','hotel'}
ca =
1×8 cell array
{'able'} {'baker'} {'charlie'} {'delta'} {'echo'} {'fox'} {'golf'} {'hotel'}
K>> regexp(ca,'a')
ans =
1×8 cell array
{[1]} {[2]} {[3]} {[5]} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
K>> ~cellfun('isempty',regexp(ca,'a'))
ans =
1×8 logical array
1 1 1 1 0 0 0 0
Sean de Wolski
el 25 de Mzo. de 2013
doc strfind %?
a more modern solution:
% for reproducibility
rng(0);
% 10 strings
strSize = [10 1];
% 10 characters in each string
numChars = 10;
% only lowercase Latin characters
unicodeBnds = [97 122];
%
myInput = arrayfun(@(a) string(char(randi(unicodeBnds,[1 numChars]))),ones(strSize))
myPattern = "[abc]";
contains(myInput,regexpPattern(myPattern))
4 comentarios
this is nice but doesn't work on a cell array unless you use:
cellfun(@(x) contains(x, regexpPattern(myPattern)), myInput)
Walter Roberson
el 17 de Dic. de 2025
The original solution (size(regexp(myInput,myPattern),1)>0) was also not generalizable to cell arrays myInput so I do not think this was a consideration for the original poster.
@gwoo if `myInput` is a properly formatted cell string, then my solution should work. I suspect that you had a cell array of 1-by-1 strings, rather than a cell array of character vectors.
% for reproducibility
rng(0);
% 10 strings
cellSize = [10 1];
% 10 characters in each string
numChars = 10;
% only lowercase Latin characters
unicodeBnds = [97 122];
%
myInput = cellfun(@(c) char(randi(unicodeBnds,[1 numChars])),repmat({1},cellSize),'UniformOutput',false)
myPattern = '[abc]';
contains(myInput,regexpPattern(myPattern))
gwoo
el 18 de Dic. de 2025
Azzi Abdelmalek
el 25 de Mzo. de 2013
0 votos
Maybe you want to use isequal or strcmp
Categorías
Más información sobre Characters and Strings en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!