How to optimize a code to find postfix in a sting
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
pamela sulis
el 23 de Nov. de 2015
Comentada: pamela sulis
el 23 de Nov. de 2015
Hi! I have a cell 106x1 of strings 'TrajCompact'. In every string I want to find all the prefix that are combination of (0,1,2,3,4) and consider only the postfix after this prefix My prefix are: 00,01,02,03,04,10,11,12,13,14,20,21,22,23,24,30,31,32,33,34,40,41,42,43,44
I try to do this, using the code
for k=1:size(TrajCompact,1)
matches(k) = regexp(TrajCompact(k), '\(?00.*', 'match', 'once');
end
The code run but I have to write it 25 times: one for every prefix. I want to find a compact expression so I modify the code in this way
[digits{1:2}] = ndgrid(0:4);
for k=1:106
matches(k) = regexp(TrajCompact(k), sprintf('?%d%d.*', digits{1}(k), digits{2}(k)), 'match', 'once');
end
but it doesn't make what I want, can you help me to find the error Thanks
2 comentarios
Stephen23
el 23 de Nov. de 2015
Editada: Stephen23
el 23 de Nov. de 2015
You should try using my FEX submission make_regexp:
This creates a figure which lets you interactively create regular expressions, and alter them while it shows you the regexp outputs. It lets you change your regular expressions and immediately see what effect it has on the string matching.
Respuesta aceptada
Walter Roberson
el 23 de Nov. de 2015
matches(k) = regexp(TrajCompact(k), '(?<=\(?[0-4]{2}).*', 'match', 'once');
this would strip off an optional '(' followed by a single two-digit number that is composed of the digits 0-4 only, and the rest of the string would be returned.
If this is not what you want please post a sample input line.
0 comentarios
Más respuestas (1)
Stephen23
el 23 de Nov. de 2015
Editada: Stephen23
el 23 de Nov. de 2015
Your first regular expression has a backslash, but your sprint version does not. The first regular expression:
>> '\(?00.*'
ans = \(?00.*
The second regular expression:
>> sprintf('?%d%d.*', 0, 0)
ans = ?00.*
The strings look quite different to me. Perhaps you wanted this:
>> sprintf('\\(?%d%d.*', 0, 0)
ans = \(?00.*
0 comentarios
Ver también
Categorías
Más información sobre Characters and Strings 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!