Search for elements in a string
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Bob Whiley
 el 28 de En. de 2015
  
    
    
    
    
    Comentada: Stephen23
      
      
 el 1 de Feb. de 2015
            I am trying to find whether a certain string of letters and special characters ( like /) and then output true if it does and false if it doesn't. I know I should convert the characters to numbers using double() but after that I am not sure what to do. An example would be to see if 'add?/adfd' has any elements from ascii value 32-47.
1 comentario
  Cedric
      
      
 el 28 de En. de 2015
				
      Editada: Cedric
      
      
 el 28 de En. de 2015
  
			Could give an example of text and string that you need to find? There are several tools available, e.g. STRFIND and REGEXP. the former is easy to understand and use, but limited, and the latter is powerful but we would need to know more about the type of strings that you need to find before we can propose a solution.
Respuesta aceptada
Más respuestas (5)
  Chad Greene
      
      
 el 28 de En. de 2015
        For multiple special characters, use a few calls of regexp and any:
s = 'abcd\potatoes\eddie\murphy?martin/lawrence';
specialChars = [regexp(s,'\.') regexp(s,'&') regexp(s,'/') regexp(s,'^')];
if any(specialChars) 
    disp('Yeah, they''re some special characters alright.') 
end
3 comentarios
  Guillaume
      
      
 el 28 de En. de 2015
				And even, if it is, a single regexp still suffice:
s = 'abcd\potatoes\eddie\murphy?martin/lawrence';
[pos, match] = regexp(s, '[\\?/]', 'start', 'match');
[characters, ~, subs] = unique(match);
positions = accumarray(subs, pos, [], @(p) {p})';
[characters; positions]
  Chad Greene
      
      
 el 28 de En. de 2015
        Use regexp
s = 'abcd\potatoes\eddie\murphy';
indicesOfSlash = regexp(s,'\')
indicesOfSlash =
     5    14    20
0 comentarios
  Image Analyst
      
      
 el 28 de En. de 2015
        Here's a method that (in my opinion) is a little more intuitive, straightforward, and less cryptic than regexp() and bsxfun():
s = 'add?/adfd' % The starting string
d = s - ' ' + 32   % Convert to ASCII number array
% Get indexes of where d is between 32 and 47
specialCharIndices = find(d >= 32 & d <= 47)
3 comentarios
  Stephen23
      
      
 el 1 de Feb. de 2015
				"a little more intuitive, straightforward, and less cryptic", that is until you want to compare more than one contiguous group of characters:
(s>=32 & s<=47) | (s>=58 & s<=60) | (s>=62 & s<=64) | (s>=133 & s<=140) % etc
bsxfun(@eq,'add?/adfd',[32:47,58:60,62:64,133:140].')
The bsxfun solution is much more robust in comparing any two input vectors, regardless of the contiguity or later decisions about what characters to include/exclude.
  per isakson
      
      
 el 28 de En. de 2015
        
      Editada: per isakson
      
      
 el 29 de En. de 2015
  
      A code based on regexp
    str = 'add\?/adfd';
    chr = char(32:47);
    xpr = ['[',regexptranslate('escape',chr),']'];
    pos = regexp( str, xpr, 'once' );
    has = not(isempty(pos));
This code may be squeezed into one obscure line.
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!





