2010-10-07 39 views
7

¿Es posible reemplazar todos los caracteres especiales en un vector matlab a través de una expresión regular?Matlab: cómo reemplazar todos los caracteres especiales en un vector?

Gracias

* EDIT: *

Gracias por sus respuestas. Estoy tratando de lograr lo siguiente. Tengo un archivo de texto que contiene pocos párrafos de una novela. He leído este archivo en un vector.

fileText = [ 'token1' '' 'token_2% token! 3'] etc.

En este caso, _%! son los caracteres especiales y me gustaría reemplazarlos con espacios en blanco (''). ¿Se puede lograr esto a través de expresiones regulares? Puedo hacer esto con javascript, pero no puedo hacer que funcione en Matlab.

Gracias

+0

Puede explicar un poco más claramente lo que quiere decir? Tal vez darnos un ejemplo? –

+0

¿Qué quiere decir con "caracteres especiales"? – gnovice

+6

Dependiendo de lo que quiere decir con "caracteres especiales", es posible que desee utilizar la función ISSTRPROP: http://www.mathworks.com/help/techdoc/ref/isstrprop.html Puede probar letras, números, espacios, control de caracteres, ... – Amro

Respuesta

22

Si por "caracteres especiales" ¿Quieres decir que utilizan con menos frecuencia Unicode personajes como ¥, , o ¼, a continuación, puede utilizar la función de REGEXPREP o establecer funciones de comparación como ISMEMBER (y que pueda convierta primero la cadena de caracteres a su código entero equivalente usando la función DOUBLE si es necesario). Aquí hay un par de ejemplos en los que todos menos los caracteres del alfabeto Inglés estándar (mayúsculas y minúsculas) se extraen de una cadena:

str = ['ABCDEFabcdefÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐ']; %# A sample string 
str = regexprep(str,'[^a-zA-Z]','');  %# Remove characters using regexprep 
str(~ismember(str,['A':'Z' 'a':'z'])) = ''; %# Remove characters using ismember 
              %# (as suggested by Andrew) 
str(~ismember(double(str),[65:90 97:122])) = ''; %# Remove characters based on 
                %# their integer code 

Todas las opciones anteriormente producen el mismo resultado:

str = 

ABCDEFabcdef 


EDIT:

en respuesta al ejemplo específico en la cuestión actualizada, aquí es cómo se puede utilizar para reemplazar todo REGEXPREP carac tros que no son a-z, A-Z, o 0-9 con espacios en blanco:

str = regexprep(str,'[^a-zA-Z0-9]',''); 

Esto puede ser más fácil que tratar de escribir una expresión regular para que coincida con cada individuo carácter "especial", ya que potencialmente podrían ser muchas de ellas . Sin embargo, si eran cierta que los únicos caracteres especiales serían _, % y !, se debería lograr el mismo que el anterior:

str = regexprep(str,'[_%!]',''); 

Además, como se menciona en el comentario de Amro, usted podría también utilizar la función ISSTRPROP para reemplazar todos los caracteres no alfanuméricos con espacios en blanco de este modo:

str(~isstrprop(str,'alphanum')) = ''; 
+2

+1. Tenga en cuenta que 65: 122 incluye caracteres no alfa como [\] '. (Haga "disp (char (65: 122))" para confirmar.) No es necesario convertir a double: ismember() opera de manera característica si ambas entradas son caracteres y no elementos de celda. Así que "ismember (str, ['A': 'Z' 'a': 'z'])" también funciona y la IMO es un poco más legible que el uso de códigos de caracteres numéricos. –

+0

@Andrew: tienes razón. Me olvidé de dividir el rango en partes. Además, es una buena sugerencia sobre el uso de ISMEMBER directamente en las cadenas de caracteres. No me di cuenta de algo como '' A ':' Z'' seguiría siendo una matriz de caracteres en lugar de convertirse automáticamente en doble. – gnovice

+0

Creo que lo que busco es regexprep. En lugar de hacer '[A-Za-z]' construí una expresión regular para todos los caracteres especiales. Esto no funcionó para mí. Voy a ejecutar tu código en un minuto. –

Cuestiones relacionadas