2010-10-07 20 views
7

Matlab vektöründeki tüm özel karakterleri normal ifadeyle değiştirmek mümkün müdür?Matlab - bir vektördeki tüm özel karakterlerin nasıl değiştirileceği?

Yanıtlarınızla için teşekkür ederiz *:

size

* EDIT ederiz. Aşağıdakileri elde etmeye çalışıyorum. Bir romanda birkaç paragraf içeren bir metin dosyası var. Bu dosyayı bir vektöre okudum.

fileText = [ 'token_2 'Token1',' '% belirteci! 3'] vb

Bu durumda, _% olarak! özel karakterler ve bunları boşluklarla değiştirmek istiyorum (''). Bu düzenli ifadeler ile elde edilebilir mi? Bunu javascript ile yapabilirim, ancak Matlab'da çalışamam.

"özel karakterler" daha az-sık ¥, veya ¼, o zaman ISMEMBER gibi işlev REGEXPREP veya set karşılaştırma işlevlerini kullanabilirsiniz (ve ayırabileceğiniz gibi Unicode karakter kullanıldığı anlamına tarafından size

+0

daha net ne demek biraz açıklayabilir misiniz? Belki bize bir örnek verebilir misin? –

+0

"Özel karakterler" ile ne demek istiyorsun? – gnovice

+6

"Özel karakterler" ile ne kastettiğinize bağlı olarak, ISSTRPROP işlevini kullanmak isteyebilirsiniz: http://www.mathworks.com/help/techdoc/ref/isstrprop.html Harfleri, sayıları, boşlukları test edebilir kontrol karakterleri, ... – Amro

cevap

22

ise ederiz karakter dizisini ilk önce gerekliyse DOUBLE işlevini kullanarak eşdeğer tamsayı koduna dönüştürün). İşte standart İngilizce alfabesi karakterleri ama hepsi (alt ve üst harf) bir dize çıkarılır birkaç örnek verilmiştir:

str = 

ABCDEFabcdef 


:

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 

seçeneklerin tümü

yukarıdaki aynı sonucu üretmek DÜZENLEME: güncellenen söz konusu örneğe karşılık

, burada tüm karakterde yerine REGEXPREP şekilde kullanabilirsiniz a-z, A-Z veya 0-9 ile boşlukları olmadıklarını ters:

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

potansiyel birçoğu olabilir, bu durum her bireyin "özel" karakteri eşleştirmek için bir normal ifade yazmaya çalışıyorum daha kolay olabilir . yapabildin, Amro tarafından açıklamada belirtildiği gibi,

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

Ayrıca: Ancak, belli sadece özel karakterler _, % ve ! olacağını, bu yukarıdaki ile aynı ulaşmak gerekiyorsa vardı Ayrıca şöyle kurusıkı olmayan tüm alfanümerik karakterleri değiştirmek için işlevini ISSTRPROP kullanın:

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

+1. 65: 122'nin [\] 'gibi alfa olmayan karakterler içerdiğini unutmayın. (Yapmak için "disp (char (65: 122))" onaylamak için.) İkiye dönüştürmeye gerek yoktur: ismember() her iki giriş de karakteristiktir ve hücre dizileri değildir. Yani "ismember (str, ['A': 'Z' 'a': 'z'])" da çalışıyor ve IMO sayısal karakter kodlarını kullanmanın biraz daha okunabilir. –

+0

@Andrew: Haklısınız. Menzili parçalara ayırmayı unuttum. Ayrıca, ISMEMBER'i ​​doğrudan karakter dizileri üzerinde kullanma konusunda iyi bir öneri. 'A' gibi bir şey fark etmedim: 'Z', otomatik olarak ikiye dönüştürülmek yerine bir karakter dizisi olarak kalacaktı. – gnovice

+0

Ben regexprep sonra ne olduğunu düşünüyorum. '[A-Za-z]' yerine, tüm özel karakterler için bir regexp oluşturdum. Bu benim için çalışmadı. Kodunu bir dakika içinde yapacağım. –

İlgili konular