2010-10-07 31 views
7

क्या नियमित अभिव्यक्ति के माध्यम से मैटलैब वेक्टर में सभी विशेष पात्रों को प्रतिस्थापित करना संभव है?Matlab - वेक्टर में सभी विशेष पात्रों को कैसे प्रतिस्थापित करें?

आप

* संपादित करें धन्यवाद: *

अपनी प्रतिक्रियाओं के लिए धन्यवाद। मैं निम्नलिखित प्राप्त करने की कोशिश कर रहा हूं। मेरे पास एक टेक्स्ट फ़ाइल है जिसमें उपन्यास से कुछ अनुच्छेद शामिल हैं। मैंने इस फाइल को वेक्टर में पढ़ा है।

fileText = [ 'Token1,' 'token_2' टोकन%! 3 '] आदि

इस मामले में, _% में! विशेष पात्र हैं और मैं उन्हें रिक्त स्थान ('') से बदलना चाहता हूं। क्या यह नियमित अभिव्यक्तियों के माध्यम से हासिल किया जा सकता है? मैं इसे जावास्क्रिप्ट के साथ कर सकता हूं, लेकिन इसे मैटलैब में काम नहीं कर सकता।

द्वारा "विशेष वर्ण" आप कम-अक्सर की तरह ¥, , या ¼, तो आप (और या तो समारोह REGEXPREP या तुलना कार्यों सेट ISMEMBER की तरह उपयोग कर सकते हैं आप कर सकते हैं Unicode पात्रों का इस्तेमाल किया मतलब आप

+0

आप अधिक स्पष्ट रूप से तुम क्या मतलब थोड़ा व्याख्या कर सकते हैं? शायद हमें एक उदाहरण दें? –

+0

"विशेष पात्र" से आपका क्या मतलब है? – gnovice

+6

"विशेष पात्रों" से आपके द्वारा किए गए कार्यों के आधार पर, आप फ़ंक्शन ISSTRPROP का उपयोग करना चाहेंगे: http://www.mathworks.com/help/techdoc/ref/isstrprop.html यह अक्षरों, संख्याओं, रिक्त स्थानों, नियंत्रण अक्षर, ... – Amro

उत्तर

22

हैं धन्यवाद यदि आवश्यक हो तो फ़ंक्शन DOUBLE का उपयोग कर चरित्र स्ट्रिंग को इसके समतुल्य पूर्णांक कोड में पहले कनवर्ट करें)। यहां कुछ उदाहरण दिए जहां सभी लेकिन मानक अंग्रेजी वर्णमाला वर्णों (लोअर और अपर मामले) एक स्ट्रिंग से निकाल दिए जाते हैं:

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 

विकल्पों में से उपरोक्त सभी एक ही परिणाम का उत्पादन संपादित करें:

अद्यतन प्रश्न में विशिष्ट उदाहरण के जवाब में, आपके द्वारा REGEXPREP उपयोग कर सकते हैं सब चरित्र को बदलने के लिए है मंत्रियों कि a-z, A-Z, या 0-9 के साथ रिक्त स्थान नहीं हैं:

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

यह प्रत्येक व्यक्ति के "विशेष" चरित्र से मेल करने के लिए रेगुलर एक्सप्रेशन लिखने की कोशिश कर की तुलना में आसान हो सकता है, के बाद से वहाँ संभवतः उनमें से कई हो सकता है । हालांकि, अगर आप थे कुछ कि केवल विशेष वर्ण _, %, और ! होगा, यह एक ही ऊपर के रूप में प्राप्त करना चाहिए:

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

इसके अलावा, जैसा Amro द्वारा टिप्पणी में उल्लेख किया है, तो आप कर सकते थे यह भी तो जैसे रिक्त स्थान के साथ सभी गैर अक्षरांकीय अक्षर को बदलने के लिए समारोह ISSTRPROP का उपयोग करें:

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

+1। ध्यान दें कि 65: 122 में गैर-अल्फा वर्ण शामिल हैं जैसे [\] '। (क्या "पुष्टि (char (65: 122))" पुष्टि करने के लिए।) डबल में कनवर्ट करने की कोई आवश्यकता नहीं है: ismember() दोनों इनपुट अक्षर हैं और सेलस्टर्स नहीं हैं। तो "ismember (str, ['ए': 'Z' 'a': 'z'])" भी काम करता है और आईएमओ संख्यात्मक वर्ण कोड का उपयोग करने से थोड़ा अधिक पठनीय है। –

+0

@ एंड्रयू: आप सही हैं। मैं भागों में भागों को तोड़ने के लिए भूल गया। इसके अलावा, सीधे चरित्र तारों पर ISMEMBER का उपयोग करने पर अच्छा सुझाव। मुझे 'ए' जैसे कुछ नहीं पता था: 'Z'' स्वचालित रूप से डबल में परिवर्तित होने की बजाय एक वर्ण सरणी रहेगा। – gnovice

+0

मुझे लगता है कि regexprep वह है जो मैं बाद में हूं। '[ए-ज़ा-जेड]' करने के बजाय मैंने सभी विशेष पात्रों के लिए एक रेगेक्स बनाया। यह मेरे लिए काम नहीं किया। मैं एक मिनट में अपना कोड चलाऊंगा। –

संबंधित मुद्दे