2010-10-07 14 views
7

È possibile sostituire tutti i caratteri speciali in un vettore MATLAB attraverso un'espressione regolare?Matlab - come sostituire tutti i caratteri speciali in un vettore?

Grazie

* EDIT: *

Grazie per le vostre risposte. Sto cercando di ottenere il seguente. Ho un file di testo che contiene alcuni paragrafi di un romanzo. Ho letto questo file in un vettore.

FILETEXT = [ 'Token1,' 'token_2' 'token%! 3'] ecc

In questo caso, _%! sono i caratteri speciali e vorrei sostituirli con spazi vuoti (''). Questo può essere ottenuto attraverso le espressioni regolari? Posso farlo con javascript, ma non riesco a farlo funzionare in Matlab.

Grazie

+0

si può spiegare un po 'più chiaramente che cosa vuoi dire? Forse darci un esempio? –

+0

Cosa intendi per "caratteri speciali"? – gnovice

+6

A seconda di cosa intendessero per "caratteri speciali", potresti voler utilizzare la funzione ISSTRPROP: http://www.mathworks.com/help/techdoc/ref/isstrprop.html Può testare lettere, numeri, spazi, caratteri di controllo, ... – Amro

risposta

22

Se per "caratteri speciali" Vuoi dire meno frequentemente utilizzati Unicode personaggi come ¥, o ¼, quindi è possibile utilizzare la funzione REGEXPREP o funzioni di confronto incastonati come ISMEMBER (e si può convertire la stringa di caratteri nel suo codice intero equivalente prima usando la funzione DOUBLE se necessario). Ecco un paio di esempi in cui tutti, ma i personaggi alfabeto inglese standard, (inferiore e maiuscole) vengono rimossi da una stringa:

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 

Tutte le opzioni sopra producono lo stesso risultato:

str = 

ABCDEFabcdef 


EDIT:

in risposta alla esempio specifico nella domanda aggiornato, ecco come è possibile utilizzare REGEXPREP per sostituire tutti carat TER che non sonoa-z, A-Z o 0-9 con spazi vuoti:

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

Questo può essere più facile che cercare di scrivere una regex per abbinare ogni singolo carattere "speciale", in quanto ci potrebbero essere potenzialmente molti di loro . Tuttavia, se si dovesse certo che gli unici caratteri speciali sarebbero _, %, e !, questo dovrebbe raggiungere lo stesso come sopra:

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

Inoltre, come indicato nel commento di Amro, si potrebbe utilizzare anche la funzione ISSTRPROP di sostituire tutti i caratteri non alfanumerici con spazi vuoti in questo modo:

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

+1. Nota che 65: 122 include caratteri non alfabetici come [\] '. (Fare "disp (char (65: 122))" per confermare.) Non c'è bisogno di convertire in double: ismember() opera characterwise se entrambi gli input sono char e non cellstrs. Quindi "ismember (str, ['A': 'Z' 'a': 'z'])" funziona anche e IMO è un po 'più leggibile rispetto all'utilizzo di codici di caratteri numerici. –

+0

@Andrew: hai ragione. Ho dimenticato di rompere la gamma in parti. Inoltre, buon suggerimento sull'uso di ISMEMBER direttamente sulle stringhe di caratteri. Non mi ero reso conto di qualcosa come "A": "Z" sarebbe rimasto un array di caratteri invece di essere convertito automaticamente in doppio. – gnovice

+0

Penso che regexprep sia quello che sto cercando. Invece di fare '[A-Za-z]' ho costruito un'espressione regolare per tutti i caratteri speciali. Questo non ha funzionato per me. Eseguirò il tuo codice tra un minuto. –

Problemi correlati