MATLAB

2010-04-12 20 views
6

में तारों के सेल सरणी में कोशिकाओं की सेल सरणी को कन्वर्ट करें स्ट्रिंग्स के सेल सरणी पर टोकन के साथ regexp का उपयोग करके मुझे कोशिकाओं की सेल सरणी मिल गई है।MATLAB

S = {'string 1';'string 2';'string 3'}; 
res = regexp(S,'(\d)','tokens') 
res = 

    {1x1 cell} 
    {1x1 cell} 
    {1x1 cell} 
res{2}{1} 
ans = 
    '2' 

मैं जानता हूँ कि मैं केवल एक एस में सेल स्ट्रिंग प्रति मैच कैसे मैं एक vectorized रूप में तार के सेल विन्यास में, इस उत्पादन में बदल सकते हैं है: यहाँ सरल उदाहरण है?

उत्तर

12

समस्या आपके विचार से भी बदतर है। REGEXP से आपका आउटपुट वास्तव में सेल सरणी सेल एरर स्ट्रिंग्स का सेल सरणी है! हाँ, तीन स्तर! निम्नलिखित का उपयोग करता है CELLFUN शीर्ष दो स्तरों से छुटकारा पाने के, तार के सिर्फ एक सेल सरणी छोड़ने:

cellArrayOfStrings = cellfun(@(c) c{1},res); 

हालांकि, अगर आप भी अपने कॉल REGEXP को एक स्तर से छुटकारा पाने के बदल सकते हैं, और फिर VERTCAT का उपयोग करें:

res = regexp(S,'(\d)','tokens','once'); %# Added the 'once' option 
cellArrayOfStrings = vertcat(res{:}); 
+0

इतना आसान है। :) बहुत बहुत धन्यवाद! – yuk

+0

@gnovice: आप उन स्तरों के बारे में सही हैं। मुझे लगता है कि दूसरा समाधान गति और स्पष्टता के लिए बेहतर है। एक बार फिर धन्यवाद। – yuk

+1

@gnovice: मुझे नहीं पता कि मैंने कितनी बार regexp के दस्तावेज़ को पढ़ा है - फिर भी मैंने 'एक बार' विकल्प नहीं देखा है। धन्यवाद! – Jonas