Find char consecutive in a string
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
pamela sulis
el 10 de Nov. de 2015
Comentada: pamela sulis
el 11 de Nov. de 2015
Hi! I have this string
stringa={stringa1; stringa2; stringa3; stringa4};
stringa1='{a(abc)(ac)d(cf)}';
stringa2='{(ad)c(bc)(ae)}';
stringa3='{(ef)(ab)(df)cb}';
stringa4='{eg(af)cbc}';
and I want to find per every string (stringa1, stringa2 ..) the number of 'ab' 'ba'. a and b not must be consecutive. I try strfind but it's not give me the right answer. Can you help me? Thanks
2 comentarios
Guillaume
el 10 de Nov. de 2015
I assume you mean a and b must not be consecutive?
Can you show what the answer should be for each of your example string? Can a 'a' be part of several 'ab' string or is it restricted to the closest 'b'.
If you ignore all the other characters is 'a***a***b***b' 1, 2 or 4 occurences?
pamela sulis
el 10 de Nov. de 2015
Editada: pamela sulis
el 10 de Nov. de 2015
Respuesta aceptada
Guillaume
el 10 de Nov. de 2015
Editada: Guillaume
el 10 de Nov. de 2015
Thanks for clarifying. You still haven't my answered my question about whether or not a character can be part of several matches or if the matches can intersect (see my 'a***a***b***b' example).
stringa1='{a(abc)(ac)d(cf)}';
stringa2='{(ad)c(bc)(ae)}';
stringa3='{(ef)(ab)(df)cb}';
stringa4='{eg(af)cbc}';
stringa={stringa1; stringa2; stringa3; stringa4};
matchstarts = regexp(stringa, 'a.+?b'); %for 'ab'
matchcounts = cellfun(@numel, matchstarts)
The regular expression above says match 'a', followed by as little as necessary (the ?) but at least one (the +) characters, followed by a 'b'.
For 'ba', the regular expression would then be 'b.+?a'
Note that if the answer is yes to either question, regular expressions won't work.
5 comentarios
Guillaume
el 10 de Nov. de 2015
'(\a.+?b)\' is a meaningless regular expression.
I'm not clear on what you're trying to match anymore. Can you describe it clearly, in words, the same way I've explained my regular expression.
As I've said '\(a.+?b\)' will match an opening bracket, followed immediately by an 'a' followed by at least one character and as few as possible, followed by a 'b', immediately followed by a closing bracket. It will not match anything else.
Más respuestas (0)
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!