split columns with separate elements
    7 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
I have a column with lastnames and insertions. How can i split those? Cause not all the lastnames have the same number of elements. 
a = bookings.child_firstname
b = split(a,' ')
Now I have the following error: 
Error using split
Element 8 of the text contains 1 matches while the previous elements
have 0. All elements must contain the same number of matches.
4 Commenti
  Walter Roberson
      
      
 il 10 Ago 2022
				regexp(a, '\s+', 'split')
would return a cell array with one entry for each a entry, with the cell array entry being a cell array of character vectors (or possibly a string array?)
Risposte (1)
  Chetan
      
 il 6 Set 2023
        
      Modificato: Chetan
      
 il 7 Set 2023
  
      I understand that you are currently facing an issue while using the “split” function due to unequal sizes of the spitted array. 
The“split”function in MATLAB requires that all elements in the input text have the same number of matches. In your case, since the last names and insertions have varying lengths, the“split”function cannot be directly used. 
To split last names and insertions that have varying lengths, you can use regular expressions and the“regexp”function in MATLAB. Regular expressions provide a flexible way to match patterns in text. 
You can refer to the documentation of these functions below: 
Here's an example of how you can split last names and insertions using regular expressions: 
% Example input 
lastNames = {'Smith', 'Johnson Jr.', 'Brown III', 'Davis'}; 
% Initialize arrays to store last names and insertions 
splitLastNames = cell(size(lastNames)); 
insertions = cell(size(lastNames)); 
% Regular expression pattern to match last names and insertions 
pattern = '^(.*?)\s+(.*?)$'; 
for i = 1:numel(lastNames) 
    % Match the pattern using regular expressions 
    matches = regexp(lastNames{i}, pattern, 'tokens'); 
    if isempty(matches) 
        % No insertion found, assign the whole string as the last name 
        splitLastNames{i} = lastNames{i}; 
        insertions{i} = ''; 
    else 
        % Extract the last name and insertion from the matches 
        splitLastNames{i} = matches{1}{1}; 
        insertions{i} = matches{1}{2}; 
    end 
end 
% Display the split last names and insertions 
for i = 1:numel(lastNames) 
    disp(['Last Name: ' splitLastNames{i} ', Insertion: ' insertions{i}]); 
end 
In this example, the regular expression pattern“^(.*?)\s+(.*?)$”is used to match the last name and insertion. The“^”and“$”symbols denote the start and end of the string, respectively. The“(.*?)”captures any characters lazily (i.e., as few as possible), and“\s+”matches one or more whitespace characters. 
I hope these suggestions help you resolve the issue you are facing. 
Best regards 
Chetan Verma 
0 Commenti
Vedere anche
Categorie
				Scopri di più su Characters and Strings in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



